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

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-02
  • 2022-12-23
  • 2021-07-18
猜你喜欢
  • 2022-12-23
  • 2021-09-29
  • 2021-08-06
  • 2021-09-07
  • 2021-05-17
  • 2021-06-29
相关资源
相似解决方案