RDD操作
1.對一個數據為{1,2,3,3}的RDD進行基本的RDD轉化操作
函數名 | 目的 | 示例 | 結果 |
map() |
函數應用於RDD中的每個元素 | rdd.map(x=>x+1) | {2,3,4,4} |
flatMap() | 將函數應用於RDD中的每個怨毒,通常用來切分單詞 | rdd.flatMap(x=>x.to(3)) | {1,2,3,2,3,3,3} |
filter() | 返回一個通過傳給filter()的函數的元素組成的RDD | rdd.filter(x=>x!=1) | {2,3,3} |
distinct() | 去重 | rdd.distinct() | {1,2,3} |
sample(withReplacement,fraction,[seed]) | 對RDD進行采樣,以及是否替換 | rdd.sample(false,0.5) | 非確定 |
2.對數據分別為{1,2,3}和{3,4,5}的RDD進行針對兩個RDD的轉化操作
函數名 | 目的 | 示例 | 結果 |
union() | 生成一個包含兩個RDD中所有元素的RDD | rdd.union(other) | {1,2,3,3,4,5} |
intersection() | 求兩個RDD共同的元素RDD | rdd.intersection(other) | {3} |
subtract() | 移除一個元素的內容 | rdd.subtract(other) | {1,2} |
cartesian() | 與另一個RDD的笛卡兒積 | rdd.cartesian(other) | {(1,3),(1,4)...(3,5)} |
3.對一個數據為{1,2,3,3}的RDD進行基本的RDD行動操作
函數名 | 目的 | 示例 | 結果 |
collect() | 所有元素 | rdd.collect() | {1,2,3,3} |
count() | 元素個數 | rdd.count() | 4 |
countByValue() | 各元素在rdd中出現的次數 | rdd.countByValue() | {(1,1),(2,1),(3,2)} |
take(num) | 從rdd中返回num個元素 | rdd.take(2) | {1,2} |
top(num) | 從rdd中返回最前面的num個元素 | rdd.top(2) | {3,3} |
takeOrdered(num)(ordering) | 按提供的順序,返回最前面的怒罵個元素 | rdd.takeOrdered(2)(myOrdering) | {3,3} |
takeSample(withReplacement,num,[seed]) | 從rdd中返回任意一些元素 | rdd.takeSample(false,1) | 非確定的 |
reduce(func) | 冰雷整合RDD中的所有數據 | rdd.reduce((x,y)=>x+y) | 9 |
fold(zero)(func) | 和reduce一樣,但是需要初始值 | rdd.fold(0)((x,y)=>x+y) | 9 |
aggregate(zeroValue)(seqOp,combOp) | 和reduce()相似,但是通常返回不同類型的函數 | rdd.aggregate((0,0))((x,y)=>(x,y)=>(x._1+y,x._2+1),(x,y)=>(x._1+y._1,x._2+y._2)) |
(9,4) |
foreach(func) | 對RDd中的每個元素使用給定的元素 | rdd.foreach(func) | 無 |
鍵值對操作
4.pair RDD的轉化操作(以鍵值對集合{(1,2),(3,4),(3,6)}為例)
函數名 | 目的 | 示例 | 結果 |
reduceByKey(func) | 合並具有相同鍵的值 | rdd.reduceByKey((x,y)=>x+y) | {(1,2),(3,10)} |
groupByKey() | 對具有相同鍵的值進行分組 | rdd.groupByKey() | {(1,[2]),(3,[4,6])} |
combineByKey(createCombiner,mergeCombiners,partitioner) | 使用不同的返回類型合並具有相同鍵的值 | ||
mapValue(func) | 對pairRDD中的每個值應用一個函數而不改變鍵 | rdd.mapValues(x=>x+1) | {(1,3),(3,5),(3,7)} |
flatMapValues() | 對pairRDD中的每個值應用一個返回迭代器的函數,然后返回的每個元素都生成一個對應原鍵的鍵值對記錄,通常用於符號化 | rdd.flatMapValues(x=>(x to 5)) | {(1,2),(1,3),(1,4),(1,5),(3,4),(3,5)} |
keys() | 返回一個僅包含鍵的RDD | rdd.keys() | {1,3,3} |
values() | 返回一個僅包含值的RDD | rdd.values() | {2,4,6} |
sortByKey() | 返回一個根據鍵排序的RDD | rdd.sortByKey() | {(1,2),(3,4),(3,6)} |
針對兩個pairRDD的轉換操作(rdd={(1,2),(3,4),(3,6)} other={(3,9)})
函數名 | 目的 | 示例 | 結果 |
subtractByKey | 刪掉RDD中的鍵與otherRDD中的鍵相同的元素 | rdd.subtractByKey(other) | {(1,2)} |
join | 對兩個rdd進行內鏈接 | rdd.join(other) | {(3,(Some(4),9)),(3,(Some(6),9))} |
rightOuterJoin | 連接操作,確保第一個rdd的鍵必須存在(右外連接) | rdd.rightOuterJoin(other) | {(3,(4,Some(9))),(3,(4,Some(9)))} |
leftOutrtJoin | 連接操作,確保第二個rdd的鍵必須存在(左外連接) | rdd.leftOuterJoin(other) | {(1,(2,None)),(3,(4,Some(9))),(3,(6,Some(9)))} |
cogroup | 將兩個rdd中擁有相同鍵的數據分組到一起 | rdd.cogroup(other) | {(1,([2],[])),(3,([4,6],[9]))} |
5.PairRDD 的行動操作(以鍵值對集合{(1,2),(3,4),(3,6)})
函數 | 描述 | 示例 | 結果 |
countByKey() | 對每個鍵對應的元素分別計數 | rdd.countByKey() | {(1,1),(3,2)} |
collectAsMap() | 將結果以映射表的形式返回,以便查詢 | rdd.collectAsMap() | Mqp{(1,2),(3,4),(3,6)} |
lookup(key) | 返回給定鍵對應的所有值 | rdd.lookup(3) | [4,6] |