3

サンプルコードはこちら http://wiki.apache.org/hadoop/WordCount

ロジックは理解していますが、メイン関数では、入力パスと出力パスのみを指定し、キーと値を指定していないことに気付きました。

map および reduce 関数はどのようにそれを把握するのでしょうか?

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException 

public void reduce(Text key, Iterable<IntWritable> values, Context context) 
4

2 に答える 2

2

Mapper と Reducer は Key1、Value1、Key2、Value2 の形式であり、Key1 と Value1 は入力のキーと値の型で、Key2 と Value2 は出力の型であることがわかったので、あとは説明します。

メイン関数には、次の行が表示されます。

job.setInputFormatClass(TextInputFormat.class);

さて、これが入力ファイルの読み取り方法を決定するものです。のソースを見ると、 (41 行目で)ファイルをキーと値のペアに分割する( sourceTextInputFormat ) が使用されていることがわかります。ここでは、ライン オフセットがキーとして設定され、ライン自体が値として設定されます。LineRecordReader

しかし、あなたが言ったように、これは自動的に行われません。独自のカスタム入力形式レコード リーダークラスを記述することで、この動作を制御できます。

これで疑問が解消されることを願っています。

于 2013-03-06T06:13:41.257 に答える