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

Java Spark编码器:何时使用beans(),java,apache-spark,memory-management,apache-spark-dataset,apache-spark-encoders,Java,Apache Spark,Memory Management,Apache Spark Dataset,Apache Spark Encoders,我在使用Spark的缓存机制时遇到了内存管理问题。我目前正在使用Kryo的Encoders,我想知道切换到bean是否有助于减少缓存数据集的大小 基本上,在使用Encoders时,使用bean而不是Kryo序列化的利弊是什么?是否有任何性能改进?除了使用SER选项进行缓存外,是否还有其他方法压缩缓存的数据集 为了记录在案,我发现了一个类似的方法来处理两者之间的比较。但是,它不会详细介绍这种比较。只要有可能。与通用二进制编码器不同,它使用通用二进制序列化并将整个对象存储为不透明的blob,Enco

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

基本上,在使用
Encoder
s时,使用bean而不是Kryo序列化的利弊是什么?是否有任何性能改进?除了使用SER选项进行缓存外,是否还有其他方法压缩缓存的
数据集


为了记录在案,我发现了一个类似的方法来处理两者之间的比较。但是,它不会详细介绍这种比较。

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

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

为什么这很重要

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

那么什么时候使用kryo编码器呢?通常情况下,当没有其他方法起作用时。就我个人而言,我会完全避免数据序列化。我能想到的唯一真正有用的应用程序是聚合缓冲区的序列化(例如检查)。

非常感谢您提供了这个全面的答案。