Spark的序列化
在Spark的优化中,提到他使用了java的序列化方案。但是在代码中我们会看到它定制了自己的序列化,java的序列化有默认实现,也可以定制
@DeveloperApi class SerializableWritable[T <: Writable](@transient var t: T) extends Serializable { def value: T = t override def toString: String = t.toString private def writeObject(out: ObjectOutputStream): Unit = Utils.tryOrIOException { out.defaultWriteObject() new ObjectWritable(t).write(out) } private def readObject(in: ObjectInputStream): Unit = Utils.tryOrIOException { in.defaultReadObject() val ow = new ObjectWritable() ow.setConf(new Configuration()) ow.readFields(in) t = ow.get().asInstanceOf[T] } }
developerApi表示这是新特性,还是不给外部调用的。
该类使用hadoop的序列化来定制的。我做了测试大大降低了数据量,一个是175字节,一个是2kb.
@transient在这里的意思就是不序列化。JAVA默认的序列化不用序列化这个成员字段,自己定义的writeObject会序列化该字段。
为什么呢?应该t没有实现Serializable。序列化是有问题的。同事强制使用hadoop的序列化方案。