我在使用Spark的缓存机制时遇到了内存管理问题。我目前正在使用Encoder
我正在使用 Kryo,想知道切换到 beans 是否可以帮助我减少缓存数据集的大小。
基本上,在使用时使用 beans 相对于 Kryo 序列化有哪些优点和缺点Encoder
是?有任何性能改进吗?有没有办法压缩缓存Dataset
除了使用 SER 选项进行缓存之外?
作为记录,我发现了一个类似的topic https://stackoverflow.com/questions/50356088/spark-dataset-encoders-kryo-vs-bean这解决了两者之间的比较。然而,它没有详细讨论这个比较。
随时你可以。与通用二进制不同Encoders
,它使用通用二进制序列化并将整个对象存储为不透明的 blob,Encoders.bean[T]
利用对象的结构来提供特定于类的存储布局。
当您比较使用创建的模式时,这种差异变得显而易见Encoders.bean
and Encoders.kryo
.
为什么这有关系?
- 您可以使用 SQL API 获得高效的字段访问,无需反序列化,并且完全支持所有
Dataset
转变。
- 通过透明的字段序列化,您可以充分利用列式存储,包括内置压缩。
那么什么时候使用kryo
Encoder
?一般来说,当其他方法都不起作用时。就我个人而言,我会完全避免它进行数据序列化。我能想到的唯一真正有用的应用程序是聚合缓冲区的序列化(例如检查如何在 Spark SQL 中查找分组向量列的平均值? https://stackoverflow.com/q/41731865/6910411).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)