1.需求描述
接上一篇留下的问题,数据如何倒序输出?如
输入
12
58
1283
45
9
...
输出
1 1283
2 58
3 45
4 12
5 9
...
2.实现思路
MapReduce的Reduce阶段会按照key-velue对中的key进行排序,如果key为封装int的IntWritable类型,那么MapReduce按照数字大小对key排序,如果key为封装为String的Text类型,那么MapReduce按照字典顺序对字符串排序。
IntWritable的默认排序机制通过compare方法实现,默认按照升序排列,源码如下
public static class Comparator extends WritableComparator {
public Comparator() {
super(IntWritable.class);
}
public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
int thisValue = readInt(b1, s1);
int thatValue = readInt(b2, s2);
return thisValue < thatValue?-1:(thisValue == thatValue?0:1);
}
}
若要实现降序排列,就必须通过重载机制重写compare方法,重写之后通过Job的setSort