1. 程式人生 > >Spark RDD Cache運算元的作用

Spark RDD Cache運算元的作用

    我們經常會對RDD執行一系列Transformation運算元操作,邏輯上每經歷一次變換,就會將RDD轉換為一個新的RDD,RDD會被劃分成很多的分割槽分佈到叢集的多個節點中。

    分割槽是邏輯概念,為了防止函式式資料不可變行(immutable)導致的記憶體需求無限擴張,使得系統記憶體被快速用完,Spark使用延遲執行(lazy)的方式執行,即只有操作累計到Action(行動),運算元才會觸發整個操作序列的執行,中間結果不會單獨再重新分配記憶體,而是在同一個資料塊上進行流水線操作。

    也就是說變換前後的新舊RDD的分割槽在物理上可能是同一塊記憶體儲存,這是Spark內部做的優化。有些RDD是計算的中間結果,其分割槽並不一定有相對應的記憶體或磁碟資料與之對應,所以如果想要複用某一個RDD,需要通過Cache運算元,將資料快取(或者說固化)到記憶體中。