使用hadoop mapreduce排序数字

时间:2014-01-07 07:19:06

标签: hadoop mapreduce

数据看起来像这样,第一个字段是数字, 11 20 11 78 20

我想根据第一个字段对这些行进行数字排序,这意味着在排序之后应该看起来像这样, 11 11 20 20 78

但hadoop这样给出: 11 20 78

2 个答案:

答案 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);
    }
}