java - Spark 序列化策略 - 我应该只使用 Kryo 吗?

标签 java apache-spark kryo

我是 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/

相关文章:

maven - NoSuchMethodError : DefaultKryoFactory - while trying to run a storm-starter project topology 错误

java - 登录远程站点然后测试表单

java - 如何自定义 javax 验证的区域设置

java - 我如何在对象中预加载 HashMap (没有 put 方法)?

java - 无法从 Spark 的 Java 数据集中的 AWS S3 读取数据

java - 谁执行 HBase 过滤器?

java - Kryonet - 缓冲区溢出 - 小对象发送

java - 无法找出空指针异常

java - 带有 Java 的 Apache Spark : Launching multiple app requests simultaneously

apache-spark - 关于数据集中的 kryo 和 java 编码器的问题