我正在尝试编写一个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作业。