1. 程式人生 > >Spark RDD入門詳解

Spark RDD入門詳解

1Spark RDD概念

RDD即彈性分散式資料集,有容錯機制並可以被並行操作的元素集合,具有隻讀、分割槽、容錯、高效、無需物化、可以快取、RDD依賴等特徵。RDD只是資料集的抽象,分割槽內部並不會儲存具體的資料。

2Spark RDD分類

1)並行集合

接收一個已經存在的Scala集合,然後進行各種平行計算。

並行化集合是通過呼叫SparkContextparallelize方法,在一個已經存在的Scala集合上建立(一個Seq物件)。集合的物件將會被拷貝,創建出一個可以被並行操作的分散式資料集。

2Hadoop資料集

Spark可以將任何Hadoop所支援的儲存資源轉化成RDD,只要檔案系統是

HDFS,或者Hadoop支援的任意儲存系統即可,如本地檔案(需要網路檔案系統,所有的節點都必須能訪問到)、HDFSCassandraHBaseAmazon S3等,Spark支援文字檔案、SequenceFiles和任何Hadoop InputFormat格式。

此兩種型別的RDD都可以通過相同的方式進行操作,從而獲得子RDD等一系列拓展,形成lineage血統關係圖。

3Spark RDD運算元

1Transformation

不觸發提交作業,完成作業中間處理過程。

[1]Value資料型別

輸入分割槽與輸出分割槽一對一型:mapflatMapmapPartitions

glom

輸入分割槽與輸出分割槽多對一型:unioncartesian

輸入分割槽與輸出分割槽一對多型:groupBy

輸出分割槽為輸入分割槽子集型:filterdistinctsubtractsampletakeSample

Cache型:cachepersist

[2]Key-Value資料型別

一對一:mapValues

聚集:combineByKeyreduceByKeypartitionBy、cogroup

連線:joinleftOutJoinrightOutJoin

2Action

會觸發SparkContext提交Job作業。

無輸出型別:foreach

HDFS型別:

saveAsTextFilesaveAsObjectFile

Scala型別:collectcollectAsMapreduceByKeyLocallylookupcounttopreducefoldaggregate

4Spark RDD機制

1)依賴機制

RDD可以相互依賴。

RDD的每個分割槽最多隻能被一個Child RDD的一個分割槽使用,則稱之為narrow dependency;若多個Child RDD分割槽都可以依賴,則稱之為wide dependency

不同操作依據其特性,可能會產生不同的依賴,例如map操作會產生narrow dep,而join操作則產生wide dep

2)分割槽機制

【後續補充】

3)快取機制

Spark可以使用persistcache方法將任意RDD快取到記憶體、磁碟檔案系統中。

快取是容錯的,如果一個RDD分片丟失,可以通過構建它的transformation自動重構。

被快取的RDD被使用時,存取速度會大大提速。

一般的excutor記憶體60%cache,剩下的40%task