2016-11-14 53 views

回答

2

我們可以堅持RDD在稍後對RDD應用多個動作或調用動作。在堅持RDD之後,spark會跳過爲執行Action而需要計算的所有階段。在Spark中,所有轉換都是延遲評估,這意味着當您調用動作時,所有轉換都將以真實的方式執行,因此如果您第一次調用collect(),它將執行所有轉換並現在持久保留一個RDD,如果您再次運行另一個動作,如count它不會重新執行所有轉換隻是跳過所有之前堅持和執行非例如

val list = sc.parallelize(List(1,23,5,4,3,2)) 
val rdd1 = list.map(_+1) 
val rdd2 = rdd1.map(_+5).cache 
rdd2.collect 
rdd2.count 

堅持部分喜歡在上面的例子中,當rdd2.collect會打電話給你注意到RDD2已經將所有執行上面的轉化緩存所以現在當計數將被調用它不會執行上面的轉換並使用持久rdd來計算結果。