Spark RDD入門詳解
1、Spark RDD概念
RDD即彈性分散式資料集,有容錯機制並可以被並行操作的元素集合,具有隻讀、分割槽、容錯、高效、無需物化、可以快取、RDD依賴等特徵。RDD只是資料集的抽象,分割槽內部並不會儲存具體的資料。
2、Spark RDD分類
1)並行集合
接收一個已經存在的Scala集合,然後進行各種平行計算。
並行化集合是通過呼叫SparkContext的parallelize方法,在一個已經存在的Scala集合上建立(一個Seq物件)。集合的物件將會被拷貝,創建出一個可以被並行操作的分散式資料集。
2)Hadoop資料集
Spark可以將任何Hadoop所支援的儲存資源轉化成RDD,只要檔案系統是
此兩種型別的RDD都可以通過相同的方式進行操作,從而獲得子RDD等一系列拓展,形成lineage血統關係圖。
3、Spark RDD運算元
1)Transformation
不觸發提交作業,完成作業中間處理過程。
[1]Value資料型別
輸入分割槽與輸出分割槽一對一型:map、flatMap、mapPartitions、
輸入分割槽與輸出分割槽多對一型:union、cartesian
輸入分割槽與輸出分割槽一對多型:groupBy
輸出分割槽為輸入分割槽子集型:filter、distinct、subtract、sample、takeSample
Cache型:cache、persist
[2]Key-Value資料型別
一對一:mapValues
聚集:combineByKey、reduceByKey、partitionBy、cogroup
連線:join、leftOutJoin、rightOutJoin
2)Action
會觸發SparkContext提交Job作業。
無輸出型別:foreach
HDFS型別:
Scala型別:collect、collectAsMap、reduceByKeyLocally、lookup、count、top、reduce、fold、aggregate
4、Spark RDD機制
1)依賴機制
RDD可以相互依賴。
若RDD的每個分割槽最多隻能被一個Child RDD的一個分割槽使用,則稱之為narrow dependency;若多個Child RDD分割槽都可以依賴,則稱之為wide dependency。
不同操作依據其特性,可能會產生不同的依賴,例如map操作會產生narrow dep,而join操作則產生wide dep。
2)分割槽機制
【後續補充】
3)快取機制
Spark可以使用persist和cache方法將任意RDD快取到記憶體、磁碟檔案系統中。
快取是容錯的,如果一個RDD分片丟失,可以通過構建它的transformation自動重構。
被快取的RDD被使用時,存取速度會大大提速。
一般的excutor記憶體60%做cache,剩下的40%做task。