Java Spark编码器:何时使用beans()
我在使用Spark的缓存机制时遇到了内存管理问题。我目前正在使用Kryo的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
Encoder
s,我想知道切换到bean是否有助于减少缓存数据集的大小
基本上,在使用Encoder
s时,使用bean而不是Kryo序列化的利弊是什么?是否有任何性能改进?除了使用SER选项进行缓存外,是否还有其他方法压缩缓存的数据集
为了记录在案,我发现了一个类似的方法来处理两者之间的比较。但是,它不会详细介绍这种比较。只要有可能。与通用二进制
编码器
不同,它使用通用二进制序列化并将整个对象存储为不透明的blob,Encoders.bean[T]
利用对象的结构来提供特定于类的存储布局
当您比较使用Encoders.bean
和Encoders.kryo
创建的模式时,这种差异变得非常明显
为什么这很重要
- 您可以使用SQL API获得高效的字段访问,而无需反序列化和对所有
转换的完全支持Dataset
- 通过透明字段序列化,您可以充分利用列存储,包括内置压缩
那么什么时候使用kryo编码器呢?通常情况下,当没有其他方法起作用时。就我个人而言,我会完全避免数据序列化。我能想到的唯一真正有用的应用程序是聚合缓冲区的序列化(例如检查)。非常感谢您提供了这个全面的答案。