首页 > 解决方案 > Rdd 和 Dataset 的不同默认持久化

问题描述

我试图找到一个很好的答案,为什么 RDD 的默认持久化是 MEMORY_ONLY 和数据集 MEMORY_AND_DISK。但是找不到。我想知道你们中是否有人知道背后的充分理由?

谢谢

标签: apache-spark

解决方案


仅仅因为MEMORY_ONLY很少有用 - 在实践中,拥有足够的内存来存储所有必需的数据并不常见,因此您经常不得不逐出一些块或仅部分缓存数据。

DISK_AND_MEMORY将数据驱逐到磁盘相比,因此不会丢失缓存块。

MEMORY_AND_DISK选择作为默认缓存模式的确切原因由SPARK-3824解释(默认情况下Spark SQL 应缓存MEMORY_AND_DISK):

Spark SQL 当前使用 MEMORY_ONLY 作为默认格式。然而,由于使用列缓冲区,必须重新计算块的成本很高,这比 Spark 核心要高得多。尤其是现在我们对缓存块更加保守,有时不会缓存我们认为可能超过内存的块,默认情况下将持久块保留在磁盘上似乎很好。


推荐阅读