標籤(空格分隔): 學習筆記
Spark編程模型的兩種抽象:RDD(Resilient Distributed Dataset)和兩種共享變量(支持並行計算的廣播變量和累加器)。
RDD
RDD是一種具有容錯性的基於內存的集羣計算方法。
RDD特徵:
1. 分區(partition):有一個數據分片列表,能夠將數據進行切分,切分後的數據能夠進行並行極端,是數據集的原子組成部分;
2. 函數(compute):計算每個分片,得出一個可遍歷的結果,用於說明在父RDD上執行何種計算;
3. 依賴(dependency):計算每個RDD對父RDD的依賴列表,源RDD沒有依賴,通過依賴關係描述血統(lineage);
4. 優先位置:每一個分片的優先計算位置;
5. 分區策略:描述分區模式和數據存放的位置,
常用的RDD有很多種,每個Transformation操作都會產生一種RDD。
RDD依賴
- 窄依賴(narrow dependency)
窄依賴是指父RDD的每一個分區都最多被一個子RDD的分區所使用。表現爲一父一子或者多父一子。 - 寬依賴(wide dependency)
子RDD的每個分區都依賴於所有父RDD的所有分區或者多個分區。
創建RDD
- 集合(數組)創建RDD
通過並行集合(數組)創建RDD,主要調用SParkContext的parallelize方法; - 存儲創建RDD
可以從各種分佈式文件創建,也可以從支持Hadoop輸入格式數據源創建。
RDD操作
應用邏輯是通過一系列Transformation和Action來表達的,前者在RDD之間指定處理的相互依賴關係,後者指定輸出的形式。
* Transformation:是指該操作從已經存在的數據及上創建一個新的數據集,是數據集的邏輯操作,並沒有進行真正的計算;
* Action:指該方法提交一個與前一個Action之間的所有Transformation組成的job進行計算,Spark會根據Action將作業切分成多個Job。·
共享變量
廣播變量
可以在內的所有節點中被訪問,用戶緩存變量(只讀);val broadcastVar = sc.broadcast(Array(1,2,3))
累加器
只能用來做加法的變量,如計數和求和。val accum = sc.accumulator(0)