WritableComparable排序
MapTask和ReduceTask均会对数据按照key进行排序,改操作属于hadoop的默认行为,
任何应用程序中的数据均会被排序,而不管逻辑上是否需要。
默认排序按照字典顺序排序,且实现该排序的方法是快速排序。
自定义排序WritableComparable
当bean对象作为key传输,需要实现WritableComparable接口
序列化过程:
//反序列化
@Override
public void readFields(DataInput in) throws IOException {
// TODO Auto-generated method stub
upFlow = in.readLong();
downFlow = in.readLong();
sumFlow = in.readLong();
}
//序列化
@Override
public void write(DataOutput out) throws IOException {
out.writeLong(upFlow);
out.writeLong(downFlow);
out.writeLong(sumFlow);
}
需要注意的是,序列化与反序列化是一个队列,所以要保证序列化与反序列化传来的值需要顺序一致。
重写compareTo方法实现倒序排序
public int compareTo(FlowBean bean) {
// TODO Auto-generated method stub
int result;
if(sumFlow > bean.getSumFlow()) {
result = -1;
}else if(sumFlow < bean.getSumFlow()) {
result = 1;
}else {
result = 0;
}
return result;
}
升序排序
自身值>传来的值
1
自身值<传来的值
-1
降序排序
自身值>传来的值
-1
自身值<传来的值
1