理解 Spark RDD 運算元 aggregate

2021-09-13 01:55:59 字數 1367 閱讀 5102

def aggregate[u](zerovalue: u)(seqop: (u, t) ⇒ u, combop: (u, u) ⇒ u)(implicit arg0: classtag[u]): u

這個運算元一共有兩個引數列表,第乙個引數列表中傳遞zerovalue第零個值)第二個引數列表中傳遞兩個函式,傳入的第乙個函式seqop函式會作用於每個分割槽,第二個函式combop函式在第乙個函式執行完之後彙總所有分割槽結果。

def main

(args: array[string]

): unit =

,(a,b)

=>

)print

(sum)

}

累加器這兩個函式的第乙個引數都是累加器,第一次執行時,會把zerovalue賦給累加器。,第一次之後會把返回值賦給累加器,作為下一次運算的第乙個引數。seqop函式每個分割槽有個累加器,combop函式只有乙個累加器。seqop

seqop對分區內的所有元素遍歷計算

這個分割槽有幾個元素執行幾次這個方法

當第乙個元素1傳進來時

(x,y)

x代表累加器,(第一次執行時,會把zerovalue賦給累加器。zerovalue=0),y代表第乙個元素1,之後將返回值賦回給累加器。

當第二個元素2傳進來時

x代表上一次運算之後賦了新值的累加器,(0+1)=1,y代表傳入的第二個元素2

當第三個元素3傳進來時

x代表累加器,y代表第新傳入的元素…

如圖

combop

之後combop會合併所有分割槽的結果。

(a,b)

這個函式遍歷所有中間結果(累加器:乙個分割槽乙個)

第一次執行時,a是combop累加器(第一次執行時,會把zerovalue賦給累加器),b是第乙個分割槽的累加器,之後將返回值賦回給combop累加器。

第二次執行時,a是combop累加器,b是第二個分割槽的累加器

每次計算後都會把結果賦給combop累加器作為下一次運算的第乙個引數,combop只有乙個累加器。

有幾個分割槽,就執行幾次combop函式。

上面栗子只有一次

下面兩次。

SparkRDD運算元 sample運算元

val newrdd oldrdd.sample withreplacement,fraction,seed withreplacement表示是抽出的資料是否放回,true為有放回的抽樣,false為無放回的抽樣 fraction表示隨機抽樣的資料數量 seed用於指定隨機數生成器種子 def s...

Spark RDD運算元介紹

spark學習筆記總結 spark可以用於批處理 互動式查詢 spark sql 實時流處理 spark streaming 機器學習 spark mllib 和圖計算 graphx spark是mapreduce的替代方案,而且相容hdfs hive,可融入hadoop的生態系統,以彌補mapre...

Spark RDD運算元介紹

spark學習筆記總結 spark可以用於批處理 互動式查詢 spark sql 實時流處理 spark streaming 機器學習 spark mllib 和圖計算 graphx spark是mapreduce的替代方案,而且相容hdfs hive,可融入hadoop的生態系統,以彌補mapre...