一、序列化Writable接口
~~~ [MapRedice之writable序列化接口]
~~~ [MapRedice之writable序列化接口案例part01]
~~~ [MapRedice之writable序列化接口案例part02]
~~~ [MapRedice之writable序列化接口案例part03]
~~~ [MapRedice之writable序列化接口案例本地运行]
### --- 序列化writable序列化接口
~~~ 基本序列化类型往往不能满足所有需求,比如在Hadoop框架内部传递一个自定义bean对象,
~~~ 那么该对象就需要实现Writable序列化接口。
二、实现Writable序列化步骤如下
### --- 必须实现Writable接口
### --- 反序列化时,需要反射调用空参构造函数,所以必须有空参构造
public CustomBean() {
super();
}
### --- 重写序列化方法
@Override
public void write(DataOutput out) throws IOException {
....
}
### --- 重写反序列化方法
@Override
public void readFields(DataInput in) throws IOException {
....
}
~~~ 反序列化的字段顺序和序列化字段的顺序必须完全一致
~~~ 方便展示结果数据,需要重写bean对象的toString()方法,可以自定义分隔符
~~~ 如果自定义Bean对象需要放在Mapper输出KV中的K,则该对象还需实现Comparable接口,
~~~ 因为因为MapReduce框中的Shuffle过程要求对key必须能排序!!
### --- 排序内容专门案例讲解!!
@Override
public int compareTo(CustomBean o) {
// 自定义排序规则
return this.num > o.getNum() ? -1 : 1;
}
三、Writable接口案例
### --- 需求
~~~ 统计每台智能音箱设备内容播放时长
~~~ 原始日志格式
001 001577c3 kar_890809 120.196.100.99 1116 954 200
日志id 设