日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

groupByKey、reduceByKey区别(转)

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 groupByKey、reduceByKey区别(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:

https://www.cnblogs.com/bonelee/p/7111395.html

spark-shell 下:

?

代碼如下:

val words = Array("one", "two", "two", "three", "three", "three") val wordsRDD = sc.parallelize(words).map(word => (word, 1)) val wordsCountWithReduce = wordsRDD. reduceByKey(_ + _).collect().foreach(println) val wordsCountWithGroup = wordsRDD.groupByKey().map(w => (w._1, w._2.sum)).collect().foreach(println)

雖然兩個函數都能得出正確的結果, 但reduceByKey函數更適合使用在大數據集上。 這是因為Spark知道它可以在每個分區移動數據之前將輸出數據與一個共用的key結合。

借助下圖可以理解在reduceByKey里發生了什么。 在數據對被搬移前,同一機器上同樣的key是怎樣被組合的( reduceByKey中的 lamdba 函數)。然后 lamdba 函數在每個分區上被再次調用來將所有值 reduce成最終結果。整個過程如下:

?

另一方面,當調用 groupByKey時,所有的鍵值對(key-value pair) 都會被移動,在網絡上傳輸這些數據非常沒必要,因此避免使用 GroupByKey。

為了確定將數據對移到哪個主機,Spark會對數據對的key調用一個分區算法。 當移動的數據量大于單臺執行機器內存總量時Spark會把數據保存到磁盤上。 不過在保存時每次會處理一個key的數據,所以當單個 key 的鍵值對超過內存容量會存在內存溢出的異常。 這將會在之后發行的 Spark 版本中更加優雅地處理,這樣的工作還可以繼續完善。 盡管如此,仍應避免將數據保存到磁盤上,這會嚴重影響性能。

?

image

你可以想象一個非常大的數據集,在使用 reduceByKey 和 groupByKey 時他們的差別會被放大更多倍。

總結

以上是生活随笔為你收集整理的groupByKey、reduceByKey区别(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。