RDD操作


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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM