美文网首页
[Hadoop] reduce阶段Iterable的对象重用

[Hadoop] reduce阶段Iterable的对象重用

作者: techhow | 来源:发表于2017-04-22 18:07 被阅读0次
protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context) throws IOException, InterruptedException {  
  for(VALUEIN value: values) {  
    context.write((KEYOUT) key, (VALUEOUT) value);  
  }  
}  

虽然reduce方法会反复执行多次,但key和value相关的对象只有两个,reduce会反复重用这两个对象。所以如果要保存key或者value的结果,只能将其中的值取出另存或者重新clone一个对象(例如Text store = new Text(value) 或者 String a = value.toString()),而不能直接赋引用。因为引用从始至终都是指向同一个对象,你如果直接保存它们,那最后它们都指向最后一个输入记录。会影响最终计算结果而出错。

参考资料:
1. https://my.oschina.net/leejun2005/blog/131744
2. http://blog.csdn.net/cnweike/article/details/51025340

相关文章

网友评论

      本文标题:[Hadoop] reduce阶段Iterable的对象重用

      本文链接:https://www.haomeiwen.com/subject/whiszttx.html