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