Spark RDD持久化

Spark RDD持久化

Spark提供了一种方便的方式来对数据集进行持久化,将其存储在内存中,跨操作进行处理。在持久化RDD时,每个节点都会将其计算的分区存储在内存中。现在,我们可以在该数据集上的其他任务中重复使用它们。

我们可以使用persist()或cache()方法来标记要持久化的RDD。Spark的缓存是容错的。在任何情况下,如果一个RDD的分区丢失了,它将自动使用最初创建它的转换重新计算。

有几种不同的存储级别可用于存储持久化的RDD。通过将StorageLevel对象(ScalaJavaPython)传递给persist()方法来使用这些级别。然而,cache()方法用于默认的存储级别,即StorageLevel.MEMORY_ONLY。

以下是一组存储级别:

存储级别 描述
MEMORY_ONLY 将RDD作为JVM中的反序列化Java对象存储。这是默认级别。如果RDD无法全部放入内存中,某些分区将不会被缓存,每次需要时都会重新计算。
MEMORY_AND_DISK 将RDD作为JVM中的反序列化Java对象存储。如果RDD无法全部放入内存中,将那些无法放入内存的分区存储在磁盘上,并在需要时从磁盘上读取。
MEMORY_ONLY_SER (Java和Scala) 将RDD作为序列化的Java对象存储(即每个分区一个字节数组)。一般来说,这比反序列化的对象更节省空间。
MEMORY_AND_DISK_SER (Java和Scala) 它与MEMORY_ONLY_SER类似,但是将无法放入内存的分区溢写到磁盘上,而不是重新计算它们。
DISK_ONLY 仅将RDD分区存储在磁盘上。
MEMORY_ONLY_2, MEMORY_AND_DISK_2,等等 与上述级别相同,但每个分区在两个集群节点上复制。
OFF_HEAP(实验性) 它与MEMORY_ONLY_SER类似,但数据存储在非堆内存中。非堆内存必须启用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程