(本人初次接觸spark可能有些地方理解的不夠到位,希望各位讀者多多指正,對於不恰當的地方也會進行改進) 1、RDD定義:是彈性分散式數據集,是分佈到各個節點的數據集合,具有自動容錯性、位置感知調度和可伸縮性等。 2、RDD的特性: 2.1 分區(partition) 分區是RDD的基本組成單位(s ...
(本人初次接觸spark可能有些地方理解的不夠到位,希望各位讀者多多指正,對於不恰當的地方也會進行改進)
1、RDD定義:是彈性分散式數據集,是分佈到各個節點的數據集合,具有自動容錯性、位置感知調度和可伸縮性等。
2、RDD的特性:
2.1 分區(partition)
分區是RDD的基本組成單位(spark並行處理的基本單元),屬於RDD的子集。每個分區的計算都是獨立執行的,並且分佈到Slave節點上去計算。每個節點上可能會有多個分區,每個分區有對應的Task線程。
2.2 依賴
由於RDD之間的轉換操作可以從已有RDD創建出新的RDD,一次新舊RDD之間必定會存在著某種聯繫,這種關係就被稱為依賴。
依賴的分類:
窄依賴:父RDD的每個分區最多被子RDD的一個分區所依賴(一對一的關係);
寬依賴:父RDD的每個分區可被子RDD的多個分區所依賴(一對多的關係)。
窄依賴和寬依賴的比較:
(1)窄依賴:子RDD中的某個分區出錯,可以方便的計算出其父RDD所對應的分區,然後進行重新計算生成子RDD對應的分區;
(2)子RDD出錯可能導致父RDD的多個分區進行重新計算。
union操作是將兩個RDD中的元素進行合併,將結果封裝成新的RDD,類似與兩個集合的合併運算。 join針對Key-Value對形式的兩個RDD進行連接操作,連接的依據是Key值,其功能與關係型資料庫中 表的內連接操作相同。
3、RDD的創建:
RDD的創建有三種方式:基於集合進行創建、基於外部存儲創建、根據已有RDD進行創建(RDD的創建操作)。
基於集合創建提供了parallelize和makeRDD兩個操作。對於基於外部存儲創建,通常是從HDFS中獲取數據, 常用的操作就是textFile。
4、RDD的操作:
RDD的操作大致上可以分為兩類:轉換操作(Transformation)和執行操(Action)作。
轉換操作就是根據已有RDD生產新的RDD,且具有惰性策略(只有執行了執行操作才會被提交到各個節點去計算)。執行操作就是向驅動程式返回結果或者是將結果寫入外部存儲系統。
RDD的創建和轉換操作:
5、持久化操作
持久化操作是為了避免RDD被重新計算,能夠提高計算速度。
操作:persist(持久化到磁碟或記憶體)、cache(持久化到記憶體)、checkpiont(持久化到磁碟)。