虽然Hadoop MapReduce框架为我们提供了很多key类型,但是有些时候,MapReduce过程中的Key很复杂,需要考虑到多个维度的变化,从而导致key并不完全符合Hadoop提供的原生类型,比如说Text(对应Java中的String,)、LongWritable(对应Java中的long)等。所以我们就需要自定义Hadoop MapReduce过程中的key类型。根据这个基类去比较key,我们所需要定义的类必须实现WritableComparable这个类。
01.key是用来进行相互比较,从而达到排序的目的。
02.WritableComparable类实现了Writable(实现的类可序列化) 和Comparable(实现的类可比较)接口。
代码说明:
public int compareTo(Object o) {
//把Object o转成Name型,便于比较
Name n = (Name)o;
//我们Name怎么比大小呢?那就直接比比我们的lastName吧,
//怎么比,直接用String的compareTo方法好了,java写好的,不用白不用
int lastCmp = lastName.compareTo(n.lastName);
//看看吧如果lastName比出结果了,那最好罗,如果比出来一样咋办?那我们再比比firstName吧
return
(lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
}
代码说明:
@Override
public int compareTo(BaseDimension o) {
if(this==o) { //如果当前的类中的对象和传入的对象 == 相等返回0 true
return 0;
}
PlatformDimension other=(PlatformDimension)o; //把BaseDimension o转成PlatformDimension型,便于比较
int temp=0;
temp=Integer.compare(this.id, other.getId()); //int 类型的比较 Integer.compare(this.id, other.getId()) 当前类中的Id 和传入的id 比较
if(temp!=0) {
return temp;
}
return this.platform_name.compareTo(other.getPlatform_name());
}