java - Spark编码器: when to use beans()

标签 java apache-spark memory-management apache-spark-dataset apache-spark-encoders

我在使用Spark的缓存机制时遇到了内存管理问题。我目前正在将 Encoder 与 Kryo 结合使用,想知道切换到 beans 是否可以帮助我减少缓存数据集的大小。

基本上,在使用 Encoder 时,使用 beans 相对于 Kryo 序列化有何优缺点?有任何性能改进吗?除了使用 SER 选项进行缓存之外,还有其他方法可以压缩缓存的数据集吗?

根据记录,我发现了类似的 topic这解决了两者之间的比较。但是,它没有详细讨论此比较。

最佳答案

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

当您比较使用 Encoders.beanEncoders.kryo 创建的架构时,这种差异就变得很明显。

为什么这很重要?

  • 您可以使用 SQL API 进行高效的字段访问,无需反序列化,并且完全支持所有数据集转换。
  • 通过透明字段序列化,您可以充分利用列式存储,包括内置压缩。

那么什么时候使用kryo Encoder?一般来说,当其他方法都不起作用时。就我个人而言,我会完全避免它进行数据序列化。我能想到的唯一真正有用的应用程序是聚合缓冲区的序列化(例如检查 How to find mean of grouped Vector columns in Spark SQL? )。

关于java - Spark编码器: when to use beans(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51370288/

相关文章:

java - 解析大型 xlsx 文件,日期格式案例

linux - 在远程服务器上安装 spark 的情况下在 eclipse 上本地运行 spark 代码

ios - 何时释放 CGMutablePathRef

Android fragment 管理器内存泄漏

ios - ARC,值得与否?

java - 为什么监听器有时注册到 "this",有时注册到匿名类?

java - 使用 ReentrantLock 的 BlockingQueue 实现

java - Java 8 中具有默认方法的黑白抽象类和接口(interface)的差异示例

Java spark 无法执行 df.show()

python - MongoDB Spark 连接器 py4j.protocol.Py4JJavaError : An error occurred while calling o50. 加载