Rdd 和 Dataset 的不同默认值持久化

Tom*_*rol 2 apache-spark

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

谢谢

小智 6

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

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

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

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