Mapreduce计算,输出时key的值都是一个,而且都是最后一个put进入的值!

原因:

Key-Value对象的重用导致的:Key是一个引用,它在栈中,指向堆中一个对象,同样Value也是如此。虽然reduce方法会反复执行多次,但key和value相关的对象只有两个,key和value的引用也是只有两个,reduce会反复重用这两个对象。所以put进去的key指向的对象只有一个,对象的值为最后一个put进去的值,所以输出的key的值都为最后一个。

解决:

如果要保存key或者value的结果,只能将其中的值取出另存或者重新clone一个对象(例如Text text= new Text(value) 或者 String a = value.toString()),而不能直接赋引用。因为引用从始至终都是指向同一个对象,如果直接保存它们,那最后它们都指向最后一个输入记录。会影响最终计算结果而出错。

 

案例:

MapReduce对象重用问题

输出:

MapReduce对象重用问题

修改后的代码:

MapReduce对象重用问题

输出:

MapReduce对象重用问题

相关文章:

  • 2022-12-23
  • 2021-09-02
  • 2021-07-21
  • 2022-12-23
  • 2022-12-23
  • 2022-01-14
  • 2022-01-31
  • 2021-06-13
猜你喜欢
  • 2022-12-23
  • 2021-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-21
  • 2021-06-29
  • 2022-12-23
相关资源
相似解决方案