在MapReduce中,map对源数据进行梳理后,以key-value形式向reduce进行数据流转, 而reduce由于需要根据相同的key、不同的value进行相应的处理,如放入List集合中进行并根据bean某个字段进行排序等,为防止同一对象一直放入List中导致同一个地址,可用Apache自带的包org.apache.commons.beanutils.BeanUtils进行深度拷贝。
@Override
protected void reduce(Text key, Iterable<JavaBean> values, Context context) throws IOException, InterruptedException {
ArrayList<JavaBean> beans = new ArrayList<>();
for (JavaBean bean: values) {
JavaBean javaBean= new JavaBean ();
try {
//使用Apache提供的工具
BeanUtils.copyProperties(javaBean, bean);
} catch (Exception e) {
e.printStackTrace();
}
beans.add(javaBean);
}
}