Mapreduce有基本数据类型Text,IntWritable...,也可以由我们自定义数据类型。我们自定义数据类型需要实现接口WritableComparable,基本数据类型也是实现了这个接口。
下面是接口WritableComparable的源码
public interface WritableComparable<T> extends Writable, Comparable<T> {
}
可以看到接口WritableComparable继承了两个接口,而自己并没有实现任何方法。
下面是Writable接口的源码
public interface Writable {
void write(DataOutput out) throws IOException;
void readFields(DataInput in) throws IOException;
}
可以看到Writable接口中有两个方法,下面看Comparable接口
public interface Comparable<T> {
public int compareTo(T o);
}
这个接口只有一个方法,所以继承自WritableComoarable的类需要实现三个方法,参照如下:
public class MyWritableComparable implements WritableComparable<MyWritableComparable> {
* private int counter;
* private long timestamp;
*
* public void write(DataOutput out) throws IOException {
* out.writeInt(counter);
* out.writeLong(timestamp);
* }
*
* public void readFields(DataInput in) throws IOException {
* counter = in.readInt();
* timestamp = in.readLong();
* }
*
* public int compareTo(MyWritableComparable o) {
* int thisValue = this.value;
* int thatValue = o.value;
* return (thisValue < thatValue ? -1 : (thisValue==thatValue ? 0 : 1));
* }
*
* public int hashCode() {
* final int prime = 31;
* int result = 1;
* result = prime * result + counter;
* result = prime * result + (int) (timestamp ^ (timestamp >>> 32));
* return result
* }
* }