java序列化与kryo序列化的优缺点是什么?

phi*_*eas 6 serialization kryo apache-spark

在 spark 中,java 序列化是默认的,如果 kryo 这么高效,那么为什么不将其设置为默认值。使用 kryo 是否有一些缺点,或者在什么情况下我们应该使用 kryo 或 java 序列化?

Vla*_*ans 10

这是文档中的评论:

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

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

  1. 并非每个java.io.Serializable都开箱即用 - 如果您有扩展Serializable它的自定义类,除非注册,否则仍无法使用 Kryo 对其进行序列化。
  2. 一个需要注册自定义类。

根据文档注意:

Spark 自动为Twitter chill库的 AllScalaRegistrar 中涵盖的许多常用核心 Scala 类包含 Kryo 序列化程序。