淺談Spark算子
? Transformation,根據原有的RDD創建一個新的RDD
? actions,對RDD操作後把結果返回給driver
Transfrmation操作是延遲的,也就是說從一個RDD轉換到另一個RDD的轉換不是馬上執行的,需要等到有Action操作的時候才會真正觸發運算。
Action會觸發Spark提交作業,並將數據輸出spark系統。
從小方向來說,Spark 算子大致可以分為以下三類:
(1)Value數據類型的Transformation算子,這種變換並不觸發提交作業,針對處理的數據項是Value型的數據。
(2)Key-Value數據類型的Transfromation算子,這種變換並不觸發提交作業,針對處理的數據項是Key-Value型的數據對。
(3)Action算子,這類算子會觸發SparkContext提交Job作業。
例如map是一個轉換,他把RDD中的數據經過一系列的轉換後轉換成一個新的RDD,而reduce則是一個action,它收集RDD所有的數據經過一系列的處理,最後把結果傳遞給driver。
RDD的所有轉換操作都是lazy模式的,即Spark不會立馬計算出結果,而是記住所有對數據集的轉換操作,這些轉換只有遇到action的時候才會開始計算。這樣的設計使得spark更加高效。例如,對一個數據做一次map操作後進行reduce操作,只有reduce的結果返回給driver,而不是把數據量更大的map操作後傳遞給driver。
1.1 Transformation
transformation返回一個新的RDD方式有很多,如從數據源生成一個新的RDD,從RDD生成一個新的RDD。所有的transformation都是采用的懶策略,就是只將transformation提交是不會執行的。
詳情參考:http://spark.apache.org/docs/latest/rdd-programming-guide.html
1.2 Action
Action是得到一個值,或者一個結果。計算只有在action被提交的時候才被觸發。
歡迎關註個人微信公眾號:大數據and機器學習(CLbigdata)
淺談Spark算子