版权声明: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;
}