我对 Hadoop 数据流中的序列化有点困惑。假设我有一个如下定义的 Java 对象(该对象可能比我展示的要复杂得多):
public void MyObject {
private int Field1;
private String Field2;
public void method1() {
}
...
}
要在 mapper 和 reducer 之间传输这个对象的实例,有两种方法:
第一种方法 - 我可以在 mapper 中一一序列化 int 字段和 String 字段并将它们写入输出,然后在 reducer 中读取它们并创建MyObject
使用这些值的新实例。假设新创建的实例与原始实例没有区别。
第二种方法-我可以重写MyObject
以实现Writable
接口,并在映射器中序列化整个实例。然后在reducers中,我只需要反序列化对象就可以使用了。
这两种方法有什么区别?在传输之前序列化对象有什么好处。