Hadoop自定义序列化对象

版权声明:www.hsboy.cn [email protected] https://blog.csdn.net/oHongShu1/article/details/88935522

要求

1.必须实现Writable接口

public class MyBean implements Writable{
	...
}

2.反序列化时,需要反射调用空参构造函数,所以必须有空参构造

public MyBean() {
		super();
}

3.反序列化的顺序和序列化属性的顺序必须完全一致

//序列化方法
@Override
public void write(DataOutput out) throws IOException {
	out.writeLong(id);
	out.writeLong(price);

}
//反序列化方法
@Override
public void readFields(DataInput in) throws IOException {
	this.id  = in.readLong();
	this.price = in.readLong();
}

4.重写toString方法(打印到文本时会用到)

// 6 编写toString方法,方便后续打印到文本
@Override
public String toString() {
	return id + "\t" + price ;
}

5.如果需要将自定义的bean放在key中传输,则还需要实现WritableComparable接口,因为MapReduce框中的Shuffle过程要求对key必须能排序

按照编码规范,重写Comparable时最好考虑相等的情况,也就是下方代码等于0的情况

@Override
public int compareTo(MyBean o) {
	// 倒序排列,从大到小
	return this.id > o.id() ? -1 : 1;
}

猜你喜欢

转载自blog.csdn.net/oHongShu1/article/details/88935522