reduceByKey 可以接收一個 func 函數(shù)作為參數(shù),這個函數(shù)會作用到每個分區(qū)的數(shù)據(jù)上,即分區(qū)內部的數(shù)據(jù)先進行一輪計算,然后才進行 shuffle 將數(shù)據(jù)寫入下游分區(qū),再將這個函數(shù)作用到下游的分區(qū)上,這樣做的目的是減少 shuffle 的數(shù)據(jù)量,減輕負擔。
groupByKey 不接收函數(shù),Shuffle 過程所有的數(shù)據(jù)都會參加,從上游拉去全量數(shù)據(jù)根據(jù) Key 進行分組寫入下游分區(qū),這樣會消耗比較多的資源,數(shù)據(jù)傳輸會導致任務處理的延遲。
如果我們想要進行分組后進行聚合操作,使用 reduceByKey 會更高效, 因為reduceByKey 會在map階段合并分區(qū)內相同的key,而gourpByKey 則不會合并。
更多關于大數(shù)據(jù)培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養(yǎng)模式,擁有國內一體化教學管理及學員服務,助力更多學員實現(xiàn)高薪夢想。
注:本文部分文字和圖片來源于網絡,如有侵權,請聯(lián)系刪除。版權歸原作者所有!