預設將rdd的資料持久化到記憶體中。cache是懶執行。
注意:cache () = persist()
=persist(storagelevel.memory_only)
可以指定持久化的級別。最常用的是memory_only和memory_and_disk。」_2」表示有副本數。
cache和persist注意事項:
cache和persist都是懶執行,必須有乙個action類運算元觸發執行。
cache和persist運算元的返回值可以賦值給乙個變數,在其他job中直接使用這個變數就是使用持久化的資料了。持久化的單位是partition。
cache和persist運算元後不能立即緊跟action運算元。
錯誤:rdd.cache().count() 返回的不是持久化的rdd,而是乙個數值了
checkpoint將rdd持久化到磁碟,還可以切斷rdd之間的依賴關係。
checkpoint 的執行原理:
當rdd的job執行完畢後,會從finalrdd從後往前回溯。
當回溯到某乙個rdd呼叫了checkpoint方法,會對當前的rdd做乙個標記。
spark框架會自動啟動乙個新的job,重新計算這個rdd的資料,將資料持久化到hdfs上。
優化:對rdd執行checkpoint之前,最好對這個rdd先執行cache,這樣新啟動的job只需要將記憶體中的資料拷貝到hdfs上就可以,省去了重新計算這一步。
rdd.scala
/** persist this rdd with the default storage level (`memory_only`). */
def persist(): this.type = persist(storagelevel.memory_only)
/** persist this rdd with the default storage level (`memory_only`). */
def cache(): this.type = persist()
storagelevel.scala
class storagelevel private(
private var _usedisk: boolean, //是否使用磁碟
private var _usememory: boolean, //是否使用記憶體
private var _useoffheap: boolean, //是否使用堆外記憶體(主要指tachyon)
private var _deserialized: boolean, //是否不序列化
private var _replication: int = 1) //副本數量
extends externalizable
/** * created by qiuyang on 2018/11/30.
* * 持久化運算元
* cache/persist/checkpoint,均為懶執行運算元,需要action運算元觸發執行
* 三個持久化運算元,持久化的單位都是partition
* 1.cache: 預設將rdd中的資料儲存在記憶體中
* 2.persist(): 可選擇儲存方式,persist(storagelevel.memory_only)=cache()=persist()
* *cache和persist注意:
* >cache和persist都是懶執行,需要actio運算元觸發執行
* >對乙個rdd cache或persist之後可以賦值給乙個變數,下次直接使用這個變數就是使用持久化的rdd
* >如果賦值給乙個變數,那麼cache和persist之後不能緊跟action運算元
* 3.checkponit: 會封裝job執行
* */
object cachedemo
}
checkponitdemo.scala
package com.qiuyang.scala
import org.apache.spark.rdd.rdd
import org.apache.spark.
/** * created by qiuyang on 2018/11/30.
* checkpoint持久化--會封裝乙個job
* 特點:
* 1.將資料儲存再磁碟中,一定要先用sc.setcheckpointdir指定儲存路徑
* 2.切斷了與前面rdd的聯絡
* 4.某些特定場景,必須用checkpoint
* 5.checkpoint是懶載入,且它會再job執行完成之後,spark自動封裝job去執行
*/object checkponitdemo
}
spark的持久化
原文 spark所有複雜一點的演算法都會有persist身影,spark預設資料放在記憶體,spark很多內容都是放在記憶體的,非常適合高速迭代,1000個步驟 只有第乙個輸入資料,中間不產生臨時資料,但分布式系統風險很高,所以容易出錯,就要容錯,rdd出錯或者分片可以根據血統算出來,如果沒有對父r...
spark持久化(快取)
1 惰性求值 rdd轉化過程都是惰性求值的。這意味著在被呼叫行動操作之前spark不會開始計算,spark會在內部記錄下所要求執行的操作的相關資訊,我們可以把每個rdd看作我們通過轉化操作構建出來的 記錄如何計算資料的指定列表。把資料讀取到rdd的操作同樣是惰性的。2 持久化快取 sparkrdd是...
spark筆記 RDD的持久化
rdd.cache rdd.persist storagelevel.memory only persist方式可選取以下不同方式持久化memory and disk 如果記憶體不夠再存磁碟 disk only memory only ser 存資料時候實現序列化 可節省記憶體,但是讀取時要反序列化...