重复数据删除在 reducer 中的工作不如预期
Deduplication work not as expected in reducer
我有一个 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 上的最终文件显示相同的记录仍然存在。
代码有什么问题?我应该使用映射键去重吗?
你有超过 1 个减速机吗?如果是,那么同一个 Person 对象有可能在多个 reducer 中可用。在这种情况下,由于每个 reducer 都在自己执行并写入 HDFS,因此最终输出中可能会出现重复的 Person 记录。
我有一个 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 上的最终文件显示相同的记录仍然存在。 代码有什么问题?我应该使用映射键去重吗?
你有超过 1 个减速机吗?如果是,那么同一个 Person 对象有可能在多个 reducer 中可用。在这种情况下,由于每个 reducer 都在自己执行并写入 HDFS,因此最终输出中可能会出现重复的 Person 记录。