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的序列化方案。

 

posted @ 2015-07-01 17:44  高兴的博客  阅读(332)  评论(0编辑  收藏  举报