在Spark中,Java序列化是默认设置,如果Kryo如此高效,为什么不将其设置为默认值?是否在使用Kryo时存在一些缺点或者在哪些情景下应该使用Kryo或Java序列化?
以下是来自文档的评论:
Kryo比Java序列化更快,更紧凑(通常快10倍),但不支持所有可序列化类型,并且需要您提前注册程序中将使用的类以获得最佳性能。
因此,默认情况下不使用它,因为:
java.io.Serializable
都被默认支持——如果您有扩展Serializable
的自定义类,则必须进行注册才能使用Kryo进行序列化。根据文档的说明:
Spark自动包括Kryo序列化器,用于许多常用的Scala核心类,这些类涵盖了Twitter chill库的AllScalaRegistrar中的内容。
Kryo的优点:内存消耗低。
我使用Kryo时遇到问题的是在处理Google Protobufs时,这时我必须首先注册Proto类。
https://mvnrepository.com/artifact/de.javakaffee/kryo-serializers/0.45