【RDD持久性】通过将数据持久存储在操作中的内存中, Spark提供了一种方便的方法来处理数据集。在保留RDD时, 每个节点都会将其计算的所有分区存储在内存中。现在, 我们还可以在该数据集的其他任务中重用它们。
我们可以使用persist()或cache()方法来标记要保留的RDD。 Spark的缓存是容错的。无论如何, 如果RDD的分区丢失了, 它将使用最初创建它的转换自动重新计算它。
可以使用不同的存储级别来存储持久的RDD。通过将StorageLevel对象(Scala, Java, Python)传递给persist(), 可以使用这些级别。但是, 将cache()方法用于默认存储级别, 即StorageLevel.MEMORY_ONLY。
以下是存储级别集:
储存量 | 描述 |
---|---|
MEMORY_ONLY | 它将RDD作为反序列化的Java对象存储在JVM中。这是默认级别。如果RDD不能容纳在内存中, 则某些分区将不会在每次需要时进行缓存和重新计算。 |
MEMORY_AND_DISK | 它将RDD作为反序列化的Java对象存储在JVM中。如果RDD不能容纳在内存中, 请存储磁盘上不适合的分区, 并在需要时从那里读取它们。 |
MEMORY_ONLY_SER (Java and Scala) |
它将RDD存储为序列化的Java对象(即, 每个分区一个字节数组)。通常, 这比反序列化的对象更节省空间。 |
MEMORY_AND_DISK_SER (Java and Scala) |
它类似于MEMORY_ONLY_SER, 但是将内存中不适合的分区溢出到磁盘上, 而不是重新计算它们。 |
DISK_ONLY | 它仅将RDD分区存储在磁盘上。 |
MEMORY_ONLY_2, MEMORY_AND_DISK_2等。 | 与上面的级别相同, 但是在两个群集节点上复制每个分区。 |
OFF_HEAP (experimental) | 它类似于MEMORY_ONLY_SER, 但是将数据存储在堆外存储器中。必须启用堆外内存。 |
推荐阅读
- RDD共享变量
- RDD操作
- 什么是ASD()
- 什么是Apache Spark()
- Apache Spark安装
- Apache Spark组件
- Spark Char Count示例
- Spark架构
- Mac的6款最佳视频编辑软件列表(包括 M1 Mac)