Key-Value類型:
foldByKey
????????當分區內計算規則和分區間計算規則相同時,aggregateByKey 就可以簡化為 foldByKey
?
combineByKey
????????最通用的對 key-value 型 rdd 進行聚集操作的聚集函數(aggregation function)。類似于aggregate(),combineByKey()允許用戶返回值的類型與輸入不一致。
????????示例:現有數據 List(("a", 88), ("b", 95), ("a", 91), ("b", 93), ("a", 95), ("b", 98)),求每個key的總值及每個key對應鍵值對的個數
reduceByKey、foldByKey、aggregateByKey、combineByKey 的區別:
????????reduceByKey: 相同 key 的第一個數據不進行任何計算,分區內和分區間計算規則相同
????????FoldByKey: 每一個key 對應的數據和初始值進行分區內計算,分區內和分區間計算規則相同
????????AggregateByKey:每一個 key 對應的數據和初始值進行分區內計算,分區內和分區間計算規則可以不相同
????????CombineByKey:當計算時,發現數據結構不滿足要求時,可以讓第一個數據轉換結構。分區
內和分區間計算規則不相同。
?
sortByKey
根據鍵值對中的鍵進行排序,支持升序和降序排列。(布爾值決定升序(true)或降序(false)。)
?
join
????????join操作:返回兩個RDD中相同鍵對應的所有元素連接在一起,結果以鍵開頭,右邊是嵌套的值。
?
leftOuterJoin
類似于 SQL 語句的左外連接
左外連接和右外連接:
????????leftOuterJoin操作:類似于SQL中的左外連接,以元RDD為主。
????????rightOuterJoin操作:類似于SQL中的右外連接,以參數RDD為主。
?
cogroup
????????在類型為(K,V)和(K,W)的 RDD 上調用,返回一個(K,(Iterable<V>,Iterable<W>))類型的 RDD
?
RDD行動算子
????????行動算子就是會觸發action的算子,觸發action的含義就是真正的計算數據。
轉換算子與行動算子的區別:
轉換算子:不立即執行,只有在遇到行動算子時才會觸發計算。
行動算子:立即執行計算,返回具體值或觸發實際的計算過程
?
reduce
????????聚集 RDD 中的所有元素,先聚合分區內數據,再聚合分區間數據
?
?collect
????????函數簽名
????????????????def collect(): Array[T]
????????函數說明
????????????????在驅動程序中,以數組 Array 的形式返回數據集的所有元素
?
foreach
????????分布式遍歷 RDD 中的每一個元素,調用指定函數
?
count
????????返回 RDD 中元素的個數
?
first
????????返回 RDD 中的第一個元素
?
take
????????返回一個由 RDD 的前 n 個元素組成的數組
?
takeOrdered
????????返回該 RDD 排序后的前 n 個元素組成的數組
?
aggregate
????????分區的數據通過初始值和分區內的數據進行聚合,然后再和初始值進行分區間的數據聚合
如果圖片中rdd中numSlices那個地方不寫數字的話,是根據CPU來算的,如下圖所示:
? ? ? ? (分區計算與CPU核數的關系。
????????????????通過任務管理器查看CPU核數,并以此為基礎進行分區計算。)
?
fold
????????折疊操作,aggregate 的簡化版操作
?
countByKey
????????統計每種 key 的個數
?
save 相關算子
????????將數據保存到不同格式的文件中
?
Spark的三大數據結構
1. RDD
????????轉換算子和行動算子
2.累加器
????????用于將executor端的變量信息聚合到driver端。
????????每個task得到變量副本并更新,傳回driver端。
????????展示了相關代碼,強調可自定義創建和調用。
3.廣播變量????????
????????用于高效分發較大只讀值。
????????是只讀變量,在多個并行操作中使用同一變量。
????????展示了與RDD進行數據關聯操作的代碼
?