1. 程式人生 > >Spark中RDD操作

Spark中RDD操作

Transformations(轉換)

Transformation 說明
map(func) 根據傳入的函式處理原有的RDD物件中每一個元素,每一個新元素處理完成後返回一個物件,這些新物件組裝得到一個新的RDD,新的RDD和舊的RDD元素都是一一對應的
filter(func) 根據傳入的函式來過濾RDD中每一個元素,通過過濾條件的的元素組成一個新的RDD
flatMap(func) 先進行map操作,然後把map操作得到的結果合併為一個物件,假如map操作返回的是Array[Array[String]],那flatMap操作得到的應該是Array[String],自動將多個字串數組合併為一個,另外一個意義是一箇舊的RDD元素可以生成多個新元素,一對多的關係
mapPartitions(func) 可以將其看成map,但是他處理的是每個單獨分割槽中的資料,然後把各個分割槽的值合併
mapPartitionsWithIndex(func) 把分割槽的索引值(index)交給輸入函式處理
sample(withReplacement, fraction, seed) 取樣函式,分放回和不放回,由withReplacement引數決定,fraction:抽樣率
union(otherDataset) 兩個RDD合併,不去重
intersection(otherDataset) 兩個RDD交集且去重
distinct([numTasks])) 去重
groupByKey([numTasks]) 根據key來分組,同一個key的值放在一個集合中
reduceByKey(func, [numTasks]) 將key對應的值交給傳入的函式處理
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks]) 對key對應的值做聚合計算,返回的還是Pair RDD物件
sortByKey([ascending], [numTasks]) PairRDD以key值進行排序
join(otherDataset, [numTasks]) sql語句中內關聯
cogroup(otherDataset, [numTasks]) SQL中的全外關聯full outer join
cartesian(otherDataset) 兩個RDD進行笛卡爾集的操作,返回CartesianRDD
pipe(command, [envVars]) 將RDD的每個資料分片都接到shell-command的標準輸入上。經過shell-command的輸出資料會重新生成新的RDD,新RDD是string型別的RDD
coalesce(numPartitions) 合併分割槽,引數執行合併後的分割槽大小
repartition(numPartitions) 進行shuffle的coalesce操作
repartitionAndSortWithinPartitions(partitioner) 該方法依據partitioner對RDD進行分割槽,並且在每個結果分割槽中按key進行排序;通過對比sortByKey發現,這種方式比先分割槽,然後在每個分割槽中進行排序效率高,這是因為它可以將排序融入到shuffle階段

Action(動作)

Action 說明
reduce(func) 根據對映函式f,對RDD中的元素進行二元計算,返回計算結果。
collect() 將RDD轉換為陣列
count() RDD的元素數量
first() 返回RDD第一個元素
take(n) 將RDD的前n個元素轉換為陣列返回
takeSample(withReplacement, num, [seed]) 隨機取出num個元素轉換為陣列返回
takeOrdered(n, [ordering]) 取n個元素,用某個比較器排序後返回
saveAsTextFile(path) RDD儲存到檔案
saveAsSequenceFile(path) 儲存為hadoop SequenceFile格式檔案
saveAsObjectFile(path) 用於將RDD中的元素序列化成物件,儲存到檔案中
countByKey() PairRDD,計算Key的數量
foreach 無返回的,用於遍歷RDD,將函式f應用於每一個元素。