2016-06-19 54 views
1

我知道在Spark中有一個groupby實現,但我想了解它們是如何工作的。我看着source code通過使用地圖實現組減少

我不明白究竟它是隻映射鍵還是它也做一個減少操作。

你將如何實現group by-map map/reduce?

回答

1

這個問題有點令人費解。但是,這是對你的意圖的一次刺殺。

任何aggregate函數確實需要一個reduce階段。 groupBy是這樣一個聚合函數。實際上groupBy基本上是家族中最爲昂貴的集合函數。

AFA代碼:這清楚地表明:

groupByKey(new HashPartitioner(numPartitions)) 

注意,HashPartitioner總是執行shuffle:所以你得到一個完整的reducer-side(在地圖/減少行話)操作。

更新該OP詢問有關reduce如何工作的更多細節。其評估每個記錄的鍵,並根據鍵分配到適當的分區 -

類似於地圖,減少的reduce根據配置的Partitioner組合從map階段的結果。這是shuffle階段。

然後reducer邏輯將應用指定aggregate操作 - 和潛在的額外having(即過濾器基於集合的條件),並sorting(如果他們不local「total`排序)

+0

什麼是減少做? – Lee

+0

@Lee我已經更新了答案,以獲得更多關於'reduce'如何在火花上工作的細節。 – javadba