在spark中,java序列化是默认设置,如果kryo效率很高,那么为什么不将其设置为默认设置。使用kryo是否有一些弊端,或者在什么情况下应该使用kryo或Java序列化?
zhejun4767 回答:Java序列化与Kryo序列化的优缺点是什么?
这里是documentation的评论:
Kryo比Java序列化显着更快,更紧凑 (通常多达10倍),但不支持所有Serializable类型 并要求您在中注册要在该计划中使用的课程 前进以获得最佳性能。
因此默认情况下不使用它,因为:
- 并非开箱即用地支持每个
java.io.Serializable
-如果您具有扩展了Serializable
的自定义类,除非已注册,否则仍无法使用Kryo进行序列化。 - 需要注册自定义类。
根据documentation的注释:
,Spark自动为许多产品包括Kryo序列化器 的AllScalaRegistrar中涵盖的常用Scala核心类 Twitter chill库。
克里奥 优点:内存消耗低
与我在处理Google protobufs时一样,kryo不适用于我的时间。那就是我必须首先注册原型类
的时候https://mvnrepository.com/artifact/de.javakaffee/kryo-serializers/0.45