2017-05-05 8 views
0

ハーフマップマップを減らすアルゴリズムを学んでいます。私はJavaジェネリックコンセプトには新しいので、ジェネリックスが参照型。しかし、なぜ同じパラメータタイプが の中に<>中かっこであると宣言された理由を理解できませんでした。Javaジェネリックスが同じタイプのパラメータを複数回保持しています

以下はリデューサインタフェースを実装しており、型宣言の型式は< Text、IntWritable、Text、IntWritable>のインタフェースです。なぜ、それは< Text、IntWritable>のようになりませんか?

public static class T_Reduce extends MapReduceBase implements 
Reducer< Text, IntWritable, Text, IntWritable > 
{ 

    public void reduce(Text key, Iterator <IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException 
    { 
     ...... 
     ...... 
    } 
} 

私はグーグルを多く持っており、簡単な正解を見つけることができませんでした。

+0

短い答え:それらは入力キー、入力値、出力キー、出力値タイプ用です。入力と出力のタイプが異なる場合があります。したがって、4つのパラメータが必要です。 – vefthym

答えて

1

還元剤の4種類があります。あなたのケースでは、それはしていませんが、機能はまだそこにある、とコンパイラは最後の二つのタイプのようなものとしたものではありませんアイデアを持っているでしょう:ReducerのJavaDocが完全に署名を指定

Reducer<Text, IntWritable, ?, ?> 
3

第二の対は出力タイプであるが - 最初の2つのパラメータを減らす関数への入力のためのキーと値型であることを示し

org.apache.hadoop.mapreduce 
    Class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> 

ようなタイプ。ここでは同じですが、すべての可能なユースケースに対応する必要はありません。たとえば、intの計算からdoubleを生成しているとします。

1

Reducerの宣言を確認しましたか?私の推測では、Reducer<T,U,V,W>と宣言されているので、たとえそれらのいくつかが同じであっても、すべての型をパラメータ化する必要があります。

1

Reducer<Text, IntWritable, Text, IntWritable>は、Reducer<K2, V2, K3, V3>の特殊化です。このインターフェイスでは、K2K3は同じタイプである必要はありません。したがって、キータイプのパラメータを再利用することはできません。したがって専門化もできません。

関連する問題