apache-spark - Rdd 和 Dataset 的不同默认持久化
问题描述
我试图找到一个很好的答案,为什么 RDD 的默认持久化是 MEMORY_ONLY 和数据集 MEMORY_AND_DISK。但是找不到。我想知道你们中是否有人知道背后的充分理由?
谢谢
解决方案
仅仅因为MEMORY_ONLY
很少有用 - 在实践中,拥有足够的内存来存储所有必需的数据并不常见,因此您经常不得不逐出一些块或仅部分缓存数据。
与DISK_AND_MEMORY
将数据驱逐到磁盘相比,因此不会丢失缓存块。
MEMORY_AND_DISK
选择作为默认缓存模式的确切原因由SPARK-3824解释(默认情况下Spark SQL 应缓存MEMORY_AND_DISK
):
Spark SQL 当前使用 MEMORY_ONLY 作为默认格式。然而,由于使用列缓冲区,必须重新计算块的成本很高,这比 Spark 核心要高得多。尤其是现在我们对缓存块更加保守,有时不会缓存我们认为可能超过内存的块,默认情况下将持久块保留在磁盘上似乎很好。
推荐阅读
- javascript - 如何将变量从 js 文件传递到 html 页面?
- java - 双击使 TitledBorder 可编辑
- python - 消除“Y”值缺失或 NAN 的数据点
- android - 如何从 android.support.v7.app.AppCompatActivity 获取 android.support.transition.Transition?
- matlab - Matlab:将更多参数传递给`nlinfit`函数
- c# - 访问 WebClient 时出现“System.Net.WebException”。在浏览器上运行良好
- android - 由于 gradle 内存问题,我无法构建 Nativescript 应用程序(Android)。
- git - 分支交换更新而不合并
- sass - 如何将所有具体化 .btn、.btn-large 和 .btn-small 的颜色更改为 .pink、.accent-1?
- r - 时间戳列的相关增量