Spark中RDD操作
阿新 • • 發佈:2019-01-26
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應用於每一個元素。 |