RDD持久化

Spark通過在操作中將其持久保存在內存中,提供了一種處理數據集的便捷方式。在持久化RDD的同時,每個節點都存儲它在內存中計算的任何分區。也可以在該數據集的其他任務中重用它們。

我們可以使用persist()cache()方法來標記要保留的RDD。Spark的緩存是容錯的。在任何情況下,如果RDD的分區丟失,它將使用最初創建它的轉換自動重新計算。

存在可用於存儲持久RDD的不同存儲級別。通過將StorageLevel對象(Scala,Java,Python)傳遞給persist()來使用這些級別。但是,cache()方法用於默認存儲級別,即StorageLevel.MEMORY_ONLY

以下是存儲級別的集合:

存儲級別 描述
MEMORY_ONLY 它將RDD存儲為JVM中的反序列化Java對象。這是默認級別。如果RDD不適合記憶體,則每次需要時都不會緩存和重新計算某些分區。
MEMORY_AND_DISK 它將RDD存儲為JVM中的反序列化Java對象。如果RDD不適合記憶體,請存儲不適合磁片的分區,並在需要時從那裏讀取它們。
MEMORY_ONLY_SER 它將RDD存儲為序列化Java對象(即每個分區一個位元組的數組)。這通常比反序列化的對象更節省空間。
MEMORY_AND_DISK_SER 它類似於MEMORY_ONLY_SER,但是將記憶體中不適合的分區溢出到磁片而不是重新計算它們。
DISK_ONLY 它僅將RDD分區存儲在磁片上。
MEMORY_ONLY_2, MEMORY_AND_DISK_2 它與上面的級別相同,但複製兩個群集節點上的每個分區。
OFF_HEAP 它類似於MEMORY_ONLY_SER,但將數據存儲在堆外記憶體中。必須啟用堆外記憶體。

上一篇: RDD操作 下一篇: RDD共用變數