Java Hadoop使用IntWritable减少输出总是在2处停止

Java Hadoop使用IntWritable减少输出总是在2处停止,java,hadoop,reduce,Java,Hadoop,Reduce,Reduce程序始终将值输出为2,即使给定键的值列表大于2 例如: 字数测试文件包含如下单词 字数测试文件包含如下单词 字数测试文件包含如下单词 输出为: 这个2 2 单词2 Reduce代码是: 公共类WordCountReducer 伸缩减速机{ //公共静态最终日志log=LogFactory.getLog(MyMapper.class); @凌驾 public void reduce(文本键、Iterable值、, 上下文(上下文) 抛出IOException、InterruptedEx

Reduce程序始终将值输出为2,即使给定键的值列表大于2

例如: 字数测试文件包含如下单词 字数测试文件包含如下单词 字数测试文件包含如下单词

输出为: 这个2 2 单词2

Reduce代码是:
公共类WordCountReducer
伸缩减速机{
//公共静态最终日志log=LogFactory.getLog(MyMapper.class);
@凌驾
public void reduce(文本键、Iterable值、,
上下文(上下文)
抛出IOException、InterruptedException{
IntWritable计数=null;
for(可写入值:值){
如果(计数=null){
计数=数值;
}否则{
count.set(count.get()+value.get());
}
}
context.write(键、计数);
}
}
你能在这里解释一下这个问题吗?当我使用int计数器时,它工作得很好

count = value;
不要这样做。reducer重用这个可写的,因此,无论您将它设置为什么,它都将始终是该键的值列表中的最后一个值

相反,这样做

count = new IntWritable();

谢谢你的回复。这看起来是一个新功能,没有找到更多详细信息。请您详细解释一下Reduce循环,好吗?
count = new IntWritable();