美文网首页
[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