1. 程式人生 > >Spark中reduce和reducebykey

Spark中reduce和reducebykey

首先我們先講講兩個函式在功能上的作用與區別是什麼,然後我們再深入討論兩個函式在內部機理有什麼不同。

reduce(binary_function) 

reduce將RDD中元素前兩個傳給輸入函式,產生一個新的return值,新產生的return值與RDD中下一個元素(第三個元素)組成兩個元素,再被傳給輸入函式,直到最後只有一個值為止。

具體過程,RDD有1 2 3 4 5 6 7 8 9 10個元素, 
1+2=3 
3+3=6 
6+4=10 
10+5=15 
15+6=21 
21+7=28 
28+8=36 
36+9=45 
45+10=55

reduceByKey(binary_function)

reduceByKey就是對元素為KV對的RDD中Key相同的元素的Value進行binary_function的reduce操作,因此,Key相同的多個元素的值被reduce為一個值,然後與原RDD中的Key組成一個新的KV對。

那麼講到這裡,差不多函式功能已經明瞭了,而reduceByKey的是如何執行的呢?下面這張圖就清楚了揭示了其原理:

亦即,它會在資料搬移以前,提前進行一步reduce操作。

可以實現同樣功能的還有GroupByKey函式,但是,groupbykey函式並不能提前進行reduce,也就是說,上面的處理過程會翻譯成這樣:

所以在處理大規模應用的時候,應該使用reduceByKey函式。