Apache Spark 中 RDD 方法 persist() 和 cache() 的默认持久性级别是多少

What is the Default levels of persistence for RDD methods persist() and cache() in Apache Spark

1.What 是 Python

中 Apache Spark 中 cache() 的默认持久性级别
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER

2.As 每 "Learning Spark" 本书,persist() 默认的持久性级别是 MEMORY_ONLY_SER 对吗?

您使用的是哪个 Apache Spark 版本?假设您使用的是最新版本 (2.3.1):

关于Python documentation for Spark RDD Persistence documentation,同时调用cache()persist()方法时的存储级别是MEMORY_ONLY

默认只使用内存来存储RDD。

此外,如果您指定您正在使用的 Apache Spark 版本或 "Learning Spark" 书中引用的版本,我们可以更好地帮助您。

现在是 MEMORY_ONLY。在 Scala 中查看源代码,但很简单:

def cache(): this.type = persist()
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)
def persist(newLevel: StorageLevel): this.type = {
  // doing stuff...
}

您应该使用的存储级别取决于 RDD 本身。例如,当你没有足够的 RAM,并且 MEMORY_ONLY 级别时,你将丢失数据并且必须从头开始重新计算。或者,如果是 MEMORY_AND_DISK,您仍然会在磁盘上有一个备份,并且可以从硬盘读取它。

所以,大多数时候,重新计算这些数据比从磁盘读取要快(而且持久化的时候还得写到磁盘,这样更慢)。这就是为什么 MEMORY_ONLY 是默认值。

关卡的差异可以在官方指南中找到。 https://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-persistence