RDD行動操作

2021-07-25 04:27:01 字數 2157 閱讀 5205

行動操作是第二種型別的rdd操作,它們會把最終求得的結果返回到驅動器程式中,或者寫入外部儲存系統中。

常見的rdd行動操作:

1. reduce() :它接收乙個函式作為引數,這個函式要操作兩個相同的元素型別的rdd資料並返回乙個同樣型別的新元素。乙個簡單的例子就是函式+,可以用它來對我們的rdd進行累加。使用reduce課以很方便地計算出rdd中所有元素的總和,元素個數,以及其他型別的聚合操作。

scala> val sum = rdd1.reduce((x,y)=> x + y)

sum: int = 3

2.fold()和 reduce()類似,接收乙個與reduce()接受的函式簽名相同的函式,再加上乙個「初始值」來作為每個分割槽的第一次呼叫時的結果。

def fold(zerovalue: t)(op: (t, t) ⇒ t): t

有初始值的疊加:

scala> rdd2.collect

res12: array[int] = array(2, 3)

scala> rdd2.fold(3)((x,y)=>x+y)

res15: int = 11

執行步驟:

3 + 2= 5

3 + 3 = 6

6+5 = 11

3.aggregate()函式把我們從返回值型別必須與所操作的rdd型別相同的限制解放出來。與fold()類似,使用aggregate()函式時需要提供我們期待返回的型別的初始值。然後通過乙個rdd中的元素合併起來放入累加器。

def

aggregate[u](zerovalue: u)

(seqop: (u, t) ⇒ u, combop: (u, u) ⇒ u)

(implicit arg0: classtag[u]): u

aggregate使用者聚合rdd中的元素,先使用seqop將rdd中每個分割槽中的t型別元素聚合成u型別,再使用combop將之前每個分割槽聚合後的u型別聚合成u型別,特別注意seqop和combop都會使用zerovalue的值,zerovalue的型別為u。

與fold不同的是:計算出來的兩個不同的值可以用不相同的計算方法計算。

scala> val rdd1 = sc.makerdd(1 to 10,1)

rdd1: org.apache

.spark

.rdd

.rdd[int] = parallelcollectionrdd[31] at makerdd at :24

scala> rdd1.aggregate(1)((_+_),(_+_))

res18: int = 57

scala> val rdd1 = sc.makerdd(1 to 10,2)

rdd1: org.apache

.spark

.rdd

.rdd[int] = parallelcollectionrdd[32] at makerdd at :24

scala> rdd1.aggregate(1)((_+_),(_+_))

res19: int = 58

scala> val rdd1 = sc.makerdd(1 to 10,3)

rdd1: org.apache

.spark

.rdd

.rdd[int] = parallelcollectionrdd[33] at makerdd at :24

scala> rdd1.aggregate(1)((_+_),(_+_))

res20: int = 59

計算不同的分割槽得到的1到10的累加和,注意,每次每個分割槽計算和最後合併時都會用到初始值。

take(n)

在rdd操作中有乙個take(n)操作,返回rdd中的n個元素,並且嘗試只訪問盡量少的分割槽,因此該操作會得到乙個不均衡的集合。

top()

從rdd中獲取前幾個元素。top()從rdd中獲取前幾個元素。top會使用資料的預設順序,但我們也可以提供自己的比較函式,來提取前幾個元素。

takesample(withereplacement,num,[seed])函式可以讓我們從資料中獲取乙個取樣。red.takesample(false,1)

RDD行動運算元

作用 通過func函式聚集rdd中的所有元素,先聚合分區內資料,再聚合分區間資料。需求 建立乙個rdd,將所有元素聚合得到結果。1 建立乙個rdd int scala val rdd1 sc.makerdd 1 to 10,2 rdd1 org.apache.spark.rdd.rdd int pa...

RDD操作建立RDD,轉換操作

學習完廈門大學資料庫spark課程總結 rdd是面對物件的檔案集合,類似於dataframe的一行資料,建立rdd有很多種模式 lines sc.textfile file usr local spark 檔案目錄位址 注意sc是sparkcontext縮寫可能需要import一下,這是從本地檔案建...

Spark入門RDD操作

rdd resilient distributed datasets 彈性分布式資料集,是spark中的抽象資料結構型別,任何資料在spark中都被表示為rdd.從程式設計的角度來看,rdd可以簡單看成是乙個陣列.和普通陣列的區別是,rdd中的資料是分割槽儲存的,這樣不同分割槽的資料就可以分布在不同...