在存储之前处理减速机的结果



我正在尝试编写一个HBase MapReduce Job,它将生成我的HBase表的top10用户。

和下面的Reducer,

class Top10usersReducer extends Reducer<Text, IntWritable, Text, TreeMap<Text,IntWritable>  {
public static final byte[] CF = "infos".getBytes();
public static final byte[] COUNT = "count".getBytes();
static TreeMap<Text,IntWritable> map = new TreeMap<Text,IntWritable>();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        map.put(key, new IntWritable(sum));
        context.write(null,map);
}
}

我有这样的输出,每条记录存储在一行中:

id11841=4,id11993=8,id12493=6,id12592=2,id12706=7,id12871=1,id12990=3,id13092=10,id13528=5,id13580=9 

我想要这样的结果:

id13092=10,id13580=9,id11993=8,id12706=7,id12493=6,id13528=5,id11841=4,id12990=3,id12592=2,id12871=1

请,任何想法在哪个进程添加到减速器,以实现这一目标?

所执行的MR作业按键对输出进行排序。因此,如果要按值对reducer的输出进行排序,则需要编写另一个MR作业。

相关内容

  • 没有找到相关文章

最新更新