2

以下は、MapReduceジョブで使用しているReducer関数のコードです。各値に追加されたイテレータ+カスタム文字列( " * ---")から値を返す必要があります。ただし、代わりにカスタム文字列を2回追加しています。

たとえば、値がabcの場合、印刷する代わりに

abc***---

印刷中です

abc***---***---

なぜそれが起こっているのですか?

コード:

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

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

        while (values.hasNext()) {

            Text t=values.next();
            String s = "***---";

            t.append(s.getBytes(), 0, s.length());

            output.collect(key, t); 

        }

    }

}
4

1 に答える 1

3

Reducer クラスを としても使用していますCombinerか? その場合、Reducer での操作は 2 回適用されます。1 回は結合フェーズ (マップの後、シャッフル/並べ替えの前) で、もう 1 回は削減フェーズで適用されます。

于 2013-01-10T15:26:31.620 に答える