我有一个PersonDto
对象,它覆盖了equals()
和hashCode()
方法。
Reducer中的主要代码:
Set<PersonDto> set = new HashSet()<>;
while(iterator.hasNext()){
Record red= iterator.next();
PersonDto dto = new PersonDto();
dto.setName(red.getString("name"));
dto.setAge(red.getBigInt("age"));
set.add(dto);
}
for (PersonDto dto : set) {
context.write(new Text(dto.getname()+","+dto.getAge()));
}
但是HDFS上的最终文件显示相同的记录仍然存在。 代码有什么问题?我应该使用地图密钥进行重复数据删除吗?
答案 0 :(得分:1)
您是否有超过1个减速器?如果是,则存在一个可能性,即在多个化简器中可以使用同一Person对象。在这种情况下,由于每个reducer都是自己执行并写入HDFS,因此最终输出中可能会有重复的Person记录。