我是 Spark 新手。对于 Kryo 来说甚至还比较新。在我的 Spark 应用程序中,我使用 kryo 序列化值对象,但仅对容纳算法的对象使用 Serialized 接口(interface)...原因是我不想使用 Kryo 注册每个类。
我应该只使用 kryo 吗? 混合和匹配可以吗(就像我正在做的那样)?
最佳答案
当您设置spark.serializer
时至org.apache.spark.serializer.KryoSerializer
RDD 内的所有对象(不包括闭包*)均使用 Kryo 进行序列化。类注册只是提高性能的一种方法(注册类只需要一个整数 ID,而不是与序列化对象一起存储的完全限定类名)。您可以查看relevant section有关详细信息,请参阅 Kryo 文档。
换句话说,如果您关心性能,您应该注册所有必须在程序中序列化的类,但您已经以某种方式使用 Kryo。
<小时/>* 闭包是使用标准 Java 序列化进行序列化的,并且在 Kryo 中注册不会影响这一点,因此如果要通过闭包传递某些对象,您仍然必须使用 java.io.Serializable
.
关于java - Spark 序列化策略 - 我应该只使用 Kryo 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39499868/