起初遍历values时直接把对象添加到集合中,后来输出结果和预期不符,debug时发现添加到集合中的对象的值全部是最后一个对象的值,网上百度了下,发现是reduce阶段对象重用的问题,reduce阶段的key,value分别指向一个对象,无论操作了多少个键值对,始终是这两个对象,而ArrayList的add()添加的是对象的引用地址而不是对象的值,这样add(value),当最后一个值遍历完成后,value指向的值就变成了最后一个对象的值,所以如果想要保存key,value的值(属性),需要重新new一个对象进行保存,需要添加到集合中的,应当先new一个对象,拷贝属性后再添加到集合中,不能把直接key,value添加到集合中(除非你的迭代器中只有一个值)

具体可以参考https://my.oschina.net/leejun2005/blog/131744

 protected void reduce(Text key, Iterable<TableBean> value,
Reducer<Text, TableBean, TableBean, NullWritable>.Context context) throws IOException, InterruptedException { List<TableBean> orderBeanList = new ArrayList<TableBean>();
TableBean pdBean = new TableBean(); //分拣存储
for (TableBean tableBean : value) {
String name = tableBean.getpName();
if(StringUtils.isBlank(name)) {
TableBean bean = new TableBean();
try {
BeanUtils.copyProperties(bean, tableBean);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//orderBean
orderBeanList.add(bean);
}else {
try {
BeanUtils.copyProperties(pdBean, tableBean);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
} //遍历集合进行合并
for (TableBean tableBean : orderBeanList) {
tableBean.setpName(pdBean.getpName());
//写出
context.write(tableBean,NullWritable.get());
} }

最新文章

  1. 前端开发:面向对象与javascript中的面向对象实现(一)
  2. GHOST WIN7系统64位经典优化版 V2016年
  3. MMORPG大型游戏设计与开发(规范)
  4. 重启猫(modem)的方法
  5. 《转》.NET开源核心运行时,且行且珍惜
  6. OpenSSL命令---ciphers
  7. javascript 对象的创建,引用,释放,删除方法
  8. HTML+CSS基础学习笔记(7)
  9. Delphi 用Web App Debugger简单调试ISAPI 转
  10. location的用法
  11. Swift - iOS应用的国际化与本地化
  12. 如何设置ubuntu自己主动的睡眠时间
  13. oracle 数据库备份
  14. Away 3d 入门demo
  15. 如何降低移动APP的开发成本
  16. python cookbook 小结
  17. python logging日志输出个文件中
  18. centos6中搭建tomcat
  19. 【ContestHunter】【弱省胡策】【Round0】(A)&amp;【Round1】(B)
  20. BZOJ2789 [Poi2012]Letters 【树状数组】

热门文章

  1. CodeVs——T 3305 水果姐逛水果街Ⅱ
  2. Lucene 查询方式
  3. RMAN异机复制数据库(相同路径)
  4. JS学习笔记 - cookie设置、读取、删除
  5. UML学习总结(3)——StarUML指导手册
  6. ViewPage第二课为ViewPage加入标题
  7. 在云服务器上(CentOS)上安装Node
  8. 【AtCoder ABC 075 B】Minesweeper
  9. 【BZOJ 3238】[Ahoi2013]差异
  10. echart报表插件使用笔记(二)--按月统计