2

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

Encoder基本上,在使用s时,使用 bean 而不是 Kryo 序列化的优缺点是什么?是否有任何性能改进?Dataset除了使用 SER 选项进行缓存之外,有没有办法压缩缓存?

作为记录,我发现了一个类似的主题来处理两者之间的比较。但是,它没有详细介绍这种比较。

4

1 回答 1

1

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

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

为什么这有关系?

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

那么什么时候使用kryo Encoder呢?一般来说,当没有其他工作时。就我个人而言,我会完全避免它进行数据序列化。我能想到的唯一真正有用的应用是聚合缓冲区的序列化(例如查看如何在 Spark SQL 中找到分组向量列的平均值?)。

于 2018-07-16T22:01:32.233 回答