算子的定義:RDD中定義的函數,可以對RDD中的數據進行轉換和操作。下面根據算子類型的分類進行總結:
1. value型算子
從輸入到輸出可分為一對一(包括cache)、多對一、多對多、輸出分區為輸入分區自激
1)一對一,
map,簡單的一對一映射,集合不變;
flatMap,一對一映射,並將最后映射結果整合;
mappartitions,對分區內元素進行迭代操作,例如過濾等,然后分區不變
glom,將分區內容轉換成數據
2)多對一,
union,相同數據類型RDD進行合並,並不去重
cartesian,對RDD內的所有元素進行笛卡爾積操作
3)多對多,
groupBy,將元素通過函數生成相應的Key,然后轉化為Key-value格式
4)輸出分區為出入分區子集,
filter,對RDD進行過濾操作,結果分區不調整
distinct,對RDD進行去重操作,
subtract,RDD間進行減操作,去除相同數據元素
sample/takeSample 對RDD進行采樣操作
5)cache,
cache,將RDD數據原樣存入內存
persist,對RDD數據進行緩存操作
2. Key-Value算子
Key-Value算子大致可分為一對一,聚集,連接三類操作
1)一對一,
mapValues,針對數值對中的Value進行上面提到的map操作
2)聚集操作
combineByKey、reduceByKey、partitionBy、cogroup
3)連接
join、leftOutJoin、rightOutJoin
3. Actions算子
該算子通過SparkContext執行提交作業操作,出發RDD DAG的執行
1)foreach, 對RDD中每個元素進行操作,但是不返回RDD或者Array,只返回Unit
2)存入HDFS,saveAsTextFile,saveAsObjectFile
3)scala數據格式,collect,collectAsMap,reduceByKeyLocally, lookup, count, top, reduce, fold, aggregate