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

时间:2018-09-26 07:32:43

标签: python-2.7 apache-spark persistence

1.Python中Apache Spark中cache()的默认持久性级别是什么

MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER

2。根据“ Learning Spark”这本书,persist()的默认持久性级别为MEMORY_ONLY_SER正确吗?

2 个答案:

答案 0 :(得分:0)

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

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

默认情况下,仅内存用于存储RDD。

此外,如果您指定要使用的Apache Spark版本或“ Learning Spark”书中引用的版本,我们可以为您提供更好的帮助。

答案 1 :(得分:0)

现在是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