2015-06-14 73 views

回答

1

根據以下鏈接,應避免使用GroupByKey。

Avoid GroupByKey

+0

我不會說*「避免它2. ReduceByKey也將數據分區「*,但*」在可能的情況下更喜歡更專業的轉換「* :)。 – ale64bit

+0

'groupByKey'與'reduceByKey'不同,你不能總是爲另一個分支。我猜如果你可以使用'reduceByKey',你應該。那篇文章有點過時了。 Spark的性能似乎發生了很大的變化(性能改進)。 – BAR

3

合併和減少也最終會洗牌,但他們有更好的內存和高速性能特性,因爲他們能夠做更多的工作洗牌之前減少數據的體積。

請考慮是否必須通過組RDD [(group,num)]對數字屬性進行求和。 groupByKey會給你RDD [(group,List [num])],然後你可以使用map手動減少。洗牌需要將所有個人num移到目標分區/節點以獲取該列表 - 許多行正在洗牌。

因爲reduceByKey知道,你正在與num在做,它可以在洗牌前總結每個單獨的分區(即合計起來。) - 所以你最多隻能有一個排每group被寫入了洗牌分區/節點。

0

我會說如果groupByKey是你工作鏈中的最後一次轉換(或者你之後做的任何事情只有狹窄的依賴關係),你可以考慮它。

原因reducebyKey優選是 1.聯合如上 提到阿里斯特使得總和/ AGG變窄即可以分區內發生

相關問題