在使用Spark的缓存机制时遇到了内存管理问题。我目前正在将Encoder
与Kryo配合使用,并且想知道切换到Bean是否可以帮助我减少缓存数据集的大小。
基本上,在使用Encoder
时,通过Kryo序列化使用bean的优缺点是什么?是否有任何性能改进?除了使用SER选项进行缓存外,是否有办法压缩缓存的Dataset
?
作为记录,我发现了一个类似的topic,可以解决两者之间的比较。但是,此比较没有详细介绍。
答案 0 :(得分:1)
只要有可能。与使用通用二进制序列化并将整个对象存储为不透明blob的通用二进制Encoders
不同,Encoders.bean[T]
利用对象的结构来提供类特定的存储布局。
当您比较使用Encoders.bean
和Encoders.kryo
创建的架构时,这种区别变得显而易见。
为什么重要?
Dataset
转换。那么什么时候使用kryo
Encoder
?通常,当没有其他方法起作用时。就个人而言,我将完全避免将其用于数据序列化。我能想到的唯一真正有用的应用程序是聚合缓冲区的序列化(例如检查How to find mean of grouped Vector columns in Spark SQL?)。