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