Spark1.6.3 cache()和persist()

RDD的持久化也就是說假如我們從hdfs讀取文件,形成RDD。當我們對RDD進行持久化操作之后,
,然后再針對該RDD進行action操作(這里我們假設執(zhí)行count操作,中間可能經歷了一系列transformation操作),雖然第一次count()操作執(zhí)行完了,但是也不會清除掉RDD中的數據,而是將其緩存在內存或者磁盤上。當第二次再執(zhí)行count操作時,就不會重新從hdfs上讀取數據,形成新的RDD,而是直接從RDD所在的所有節(jié)點的緩存中直接讀取,對數據直接執(zhí)行count操作,避免了重復計算。所以如果我們合理使用RDD的持久化機制,可以有效提高應用程序的性能。

從源碼來看調用cache()方法,內部調用persist()方法 :

 def cache(): this.type = persist()

persist()方法的默認的sotrageLevel 是MEMORY_ONLY,所以cache()方法默認使用內存緩存。

  def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

  def persist(newLevel: StorageLevel): this.type = {
 // 如果用戶設置了checkpoint,我們需要覆蓋舊的storage level。
 //   checkpoint機制會將RDD的數據容錯到文件系統上(比如說
hdfs),如果在對RDD進行計算的時候,發(fā)現存儲的數據不在了,
會先找一下checkpoint數據,如果有就是用checkpoint的數據,就不
需要去計算了。
   if (isLocallyCheckpointed){
     persist(LocalRDDCheckpointData.transformStorageLevel(newLevel), allowOverride = true)
    }else{
      persist(newLevel, allowOverride = false)
   }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容