2

以下是我在 MapReduce 作业中使用的 Reducer 函数的代码。它应该从附加到每个值的迭代器 + 自定义字符串(“ * ---”)中返回值。但相反,它两次附加自定义字符串。

例如,如果值是 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 中的操作将应用两次:一次是在 Combine 阶段(在 Map 之后,在 shuffle/sort 之前),另一次是在 Reduce 阶段。

于 2013-01-10T15:26:31.620 回答