Java序列化和Kryo序列化有哪些优缺点?

10
在Spark中,Java序列化是默认设置,如果Kryo如此高效,为什么不将其设置为默认值?是否在使用Kryo时存在一些缺点或者在哪些情景下应该使用Kryo或Java序列化?
2个回答

15

以下是来自文档的评论:

Kryo比Java序列化更快,更紧凑(通常快10倍),但不支持所有可序列化类型,并且需要您提前注册程序中将使用的类以获得最佳性能。

因此,默认情况下不使用它,因为:

  1. 并非所有的java.io.Serializable都被默认支持——如果您有扩展Serializable的自定义类,则必须进行注册才能使用Kryo进行序列化。
  2. 需要注册自定义类。

根据文档的说明:

Spark自动包括Kryo序列化器,用于许多常用的Scala核心类,这些类涵盖了Twitter chill库的AllScalaRegistrar中的内容。


不是所有可序列化的对象都受支持 - 我不明白 @Vladislav Varslavans 的意思(能否给一些示例),“注册类”并不能使它可以被序列化。 - supernatural
1
我已经更新了我的答案。希望它能够更加清晰明了。 - Vladislav Varslavans
注册一个类是否会有额外的开销?我的意思是,只要我获得了内存和时间方面的改进,我注册10个类也没有问题。或者我有什么误解吗? - paradocslover
1
我不认为这是一种负担。至少文档中没有提到任何相关内容。 - Vladislav Varslavans

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接