Spark 2.x数据集的Kryo序列化

问题描述 投票:7回答:1

使用Dataset API时是否仍需要Kryo序列化?

因为数据集使用Encoders进行序列化和反序列化:

  1. Kyro序列化是否适用于数据集? (如果正确的配置传递给Spark,并且类已正确注册)
  2. 如果它有效,它会提供多少性能改进?谢谢。
kryo apache-spark-dataset apache-spark-2.0
1个回答
0
投票

如果范围内的编码器可以序列化数据集的类型(如ExpressionEncoder或RowEncoder),则不需要将Kryo用于数据集。这些可以进行字段级序列化,因此您可以执行诸如过滤数据集中的列而不解压缩整个对象的操作。编码器还有其他优化,例如“运行时代码生成,用于构建用于序列化和反序列化的自定义字节码”,并且可以比Kryo快许多倍。

但是,如果您尝试在数据集中放置一个类型并且Spark无法为其找到编码器,则会在编译时或运行时收到错误(如果不可序列化的类型嵌套在案例类或其他内容中)。例如,假设您想使用fastutil库中的DoubleRBTreeSet。在那种情况下,你需要为它定义一个编码器,快速修复通常是使用Kryo:

implicit val rbTreeEncoder = Encoders.kryo[DoubleRBTreeSet]
© www.soinside.com 2019 - 2024. All rights reserved.