数据看起来像这样,第一个字段是数字, 11 20 11 78 20
我想根据第一个字段对这些行进行数字排序,这意味着在排序之后应该看起来像这样, 11 11 20 20 78
但hadoop这样给出: 11 20 78
答案 0 :(得分:1)
同一个键由同一个reducer处理。因此,11和11由相同的减速器处理。如果输出此减速器的键,则11仅输出一次。 20岁也一样。 如果您只想输出11 11 20 20 78,请执行以下操作:
reduce(key, iterator values) {
int counter = 0;
while (values.hasNext()) {
counter++;
values.next();
}
for (int i =0; i < counter; ++i) {
output.collect(key, <whatever>);
}
}
答案 1 :(得分:0)
那是因为你没有迭代结果。 reducer输出将是一个键和值list
。要显示密钥的所有值,您需要迭代列表。
public void reducer(Text key ,Iterable<IntWritable> value, Context context) throws IOexception, InterruptedException{
for(IntWritable number: value){
context.write(key,number);
}
}