行動操作是第二種型別的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中的資料是分割槽儲存的,這樣不同分割槽的資料就可以分布在不同...