1、惰性求值:
rdd轉化過程都是惰性求值的。這意味著在被呼叫行動操作之前spark不會開始計算,spark會在內部記錄下所要求執行的操作的相關資訊,我們可以把每個rdd看作我們通過轉化操作構建出來的、記錄如何計算資料的指定列表。把資料讀取到rdd的操作同樣是惰性的。
2、持久化快取
sparkrdd是惰性求值的,而有時候我們希望能夠多次使用同乙個rdd。如果簡單地對rdd呼叫行動操作,spark每次都會重算rdd以及它的所有依賴。這在迭代演算法中消耗很大。
此時我們可以讓spark對資料進行持久化操作。當我們讓spark持久化儲存乙個rdd時,計算出的rdd節點會分別儲存它們所求出的rdd分割槽資料。如果乙個有持久化資料的節點發生故障,spark會在需要用到快取資料時重算丟失的資料分割槽。我們可以把我們的資料備份到多個節點避免這種情況發生。
注意:序列化是執行上面的基礎。
val result = input.map { x => x * x result.persist(storagelevel.disk_only) println(result.count())
println(result.collect
.mkstring(","))
spark還有乙個unpersist()方法,呼叫該方法可以手動把持久化rdd從快取中移除。 Spark惰性求值與持久化(快取)
惰性求值意味著當我們對rdd呼叫轉化操作 例如呼叫map 時 操作不會立即執行。相反,spark會在內部記錄下所要求執行的操作的相關資訊。我們不應該把rdd看作存放著特定資料的資料集,而最好把每個rdd當作我們通過轉化操作構建出來的 記錄如何計算資料的指令列表。把資料讀取到rdd的操作也同樣是惰性的...
spark的持久化
預設將rdd的資料持久化到記憶體中。cache是懶執行。注意 cache persist persist storagelevel.memory only 可以指定持久化的級別。最常用的是memory only和memory and disk。2 表示有副本數。cache和persist注意事項 c...
spark的持久化
原文 spark所有複雜一點的演算法都會有persist身影,spark預設資料放在記憶體,spark很多內容都是放在記憶體的,非常適合高速迭代,1000個步驟 只有第乙個輸入資料,中間不產生臨時資料,但分布式系統風險很高,所以容易出錯,就要容錯,rdd出錯或者分片可以根據血統算出來,如果沒有對父r...