您的位置:首页 > 其它

MapReduce自定义数据类型

2016-02-23 18:14 344 查看
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
*       }
*     }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: