数据如下所示,第一个字段是一个数字,11 20 11 78 20
我想根据第一个字段的数字对这些行进行排序,这意味着排序后应该是这样的,11 11 20 20 78
但hadoop给出了这样的结果: 11 20 78
发布于 2014-01-07 14:46:13
相同的键由相同的reducer处理。因此,11和11由相同的reducer处理。如果输出此缩减程序的关键字,则仅输出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>);
}
}
发布于 2014-01-18 05:31:30
这是因为您没有迭代结果。缩减程序的输出将是一个键和一个值的list
。要显示一个键的所有值,您需要遍历列表。
public void reducer(Text key ,Iterable<IntWritable> value, Context context) throws IOexception, InterruptedException{
for(IntWritable number: value){
context.write(key,number);
}
}
https://stackoverflow.com/questions/20966057
复制