以下是我在 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);
}
}
}
最佳答案
您是否也将Reducer类用作Combiner
?如果是这样,Reducer中的操作将被应用两次:一次在Combine阶段(Map之后,shuffle/sort之前),另一次在Reduce阶段。
关于java - MapReduce 作业的Reducer 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14255410/