天天看點

Spark學習之路(四):深度圖解Spark算子運作原理

内容簡介

    • 一、Spark算子的概念
    • 二、Spark常用算子概覽
        • 1. transform算子
        • 2.action算子
    • 三、Spark常用算子原理圖解
        • 1.transform算子
        • 2.action算子
    • 四、總結

一、Spark算子的概念

  • 在Spark中提供了大量的算子來操作RDD,所謂算子可以了解為操作RDD的方法或者函數。算子大緻分為兩種類型:transform算子和action算子,所謂transform算子是将一個RDD轉變為另一個RDD的算子,但是transform算子不觸發送出作業,隻是完成作業中間過程處理,也就是說從一個RDD 轉換生成另一個 RDD 的轉換操作不是馬上執行,需要等到有 action 操作的時候才會真正觸發運算。transform參數類型為value或者key-value的形式;action算子可以了解為将RDD執行非轉化類型操作的算子,比如說将結果持久化至外部存儲系統的操作等等,action算子會觸發SparkContext送出job作業。
  • 通俗地了解,transform算子,是對RDD執行變換操作的算子,它的傳回值是一個RDD,而對于action算子,是對RDD執行非變換操作的算子,它的傳回值一定不是RDD。對于一個Spark程式而言,必須要存在至少一個action算子,程式才會被執行,否則會抛出一個異常。

二、Spark常用算子概覽

1. transform算子

算子名稱 算子功能
map 對RDD中的每個元素都執行一個指定函數來産生一個新的RDD。任何原RDD中的元素在新RDD中都有且隻有一個元素與之對應。
flatMap 與map類似,将原RDD中的每個元素通過函數f轉換為新的元素,并将這些元素放入一個集合,構成新的RDD。
filter 對RDD元素進行過濾,傳回一個新的資料集,由經過給定的過濾條件函數後傳回值為true的原元素組成。
union 合并兩個資料類型相同的 RDD ,并不進行去重操作,儲存所有元素。
distinct 将RDD進行去重操作,傳回去重後的RDD。
cartesian 傳回兩個RDD的笛卡爾積。
groupBy 将元素通過函數生成相應的 Key,資料就轉化為 Key-Value 格式,之後将 Key 相同的元素分為一組。
groupByKey 對RDD中的資料進行分組操作,在一個由(K, V)鍵值對組成的資料集上調用,傳回一個(K, Seq[V])對的資料集。
sortBy 對RDD中的每個元素按照給定的條件進行排序。
sortByKey 對RDD中的每個元素按照Key進行排序。
ReduceByKey 對RDD中的每個元素對按照Key進行聚合操作。
join 對兩個RDD中的每個元素對進行join操作,将兩個RDD中具有相同的key的元素的value進行笛卡爾積,傳回(key,(value1,value2))類型的值。

2.action算子

算子名稱 算子功能
foreach 對 RDD 中的每個元素都應用自定義函數操作(如将資料列印到控制台),不傳回 RDD 和 Array, 而是傳回Uint。
saveAsTextFile 函數将資料輸出,存儲到 HDFS 的指定目錄。
collect 将分布式的 RDD 傳回為一個對應資料類型的單機的 scala Array 數組。
count 傳回整個 RDD 的元素個數。

三、Spark常用算子原理圖解

1.transform算子

  • map算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • flatMap算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • filter算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • union算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • distinct算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • cartesian算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • groupBy算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • groupByKey算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • sortBy算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • sortByKey算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • ReduceByKey算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • join算子
    Spark學習之路(四):深度圖解Spark算子運作原理

2.action算子

  • foreach算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • saveAsTextFile算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • collect算子
    Spark學習之路(四):深度圖解Spark算子運作原理
  • count算子
    Spark學習之路(四):深度圖解Spark算子運作原理

四、總結

  • 本文較為全面地通過圖解的方式剖析了常用算子的工作原理,但是Spark的算子不隻這些,還有一些功能較為複雜但是用的相對較少的算子沒有介紹,後面如果有需要将會補充說明,靈活使用Spark算子對RDD進行高階變換是Spark程式的核心,是以了解各個Spark算子的使用至關重要,希望對您可以有所幫助。感謝您的閱讀,如有錯誤請不吝賜教!
  • 更多内容請看 蕭邦主的技術部落格導航

繼續閱讀