Spark 编码器:何时使用 beans()

Spark Encoders: when to use beans()

我在使用Spark的缓存机制时遇到了内存管理问题。我目前正在使用 Encoders 和 Kryo,想知道切换到 beans 是否会帮助我减少缓存数据集的大小。

基本上,在使用 Encoders 时,使用 bean 而不是 Kryo 序列化的优缺点是什么?是否有任何性能改进?除了使用 SER 选项进行缓存之外,还有其他方法可以压缩缓存的 Dataset 吗?

郑重声明,我找到了一个类似的 来处理两者之间的比较。但是,它没有深入到这个比较的细节。

只要有可能。与使用通用二进制序列化并将整个对象存储为不透明 blob 的通用二进制 Encoders 不同,Encoders.bean[T] 利用对象的结构来提供 class 特定的存储布局。

当您比较使用 Encoders.beanEncoders.kryo 创建的模式时,这种差异变得很明显。

为什么重要?

  • 您可以使用 SQL API 获得高效的字段访问,无需反序列化并完全支持所有 Dataset 转换。
  • 通过透明字段序列化,您可以充分利用列式存储,包括内置压缩。

那么什么时候用kryoEncoder呢?一般来说,当没有其他工作时。就个人而言,我会完全避免它用于数据序列化。我能想到的唯一真正有用的应用程序是聚合缓冲区的序列化(检查例如)。