2017-06-13 62 views
1

我需要計算Scala Array中存在的每個對的出現次數,並且後者是分佈式的。所以:使用Apache Spark,如何計算Scala陣列中每個對的出現

  1. 我必須計算每對上存在的RDD是我的羣集節點的出現(即:「關於分佈式Array的每一部分」)。這意味着我將得到x個結果^ 1,其中x:我的羣集節點的數量。

  2. 然後,司機必須加起來的結果,要知道分配Array的每對出現次數。

^1:請注意,一個結果是每一對自己的分佈式Array的一部分的羣集的節點計數。我認爲HashMap在那裏使用會很好。順便說一句,HashMap也會被驅動程序使用。司機將不得不總結其HashMap的每個案件與它從羣集節點收到的相應案件HashMap

ILLUSRATION: enter image description here

+2

小心分享示例數據集和預期輸出? – mtoto

+0

當然!我只是添加了一張圖來說明我的話。輸入和輸出數據集被給出。 –

+0

您是否可以不粘貼數據的附加圖像,但以可重現的格式粘貼代碼和數據? – mtoto

回答

1

好像你所需要的 「reduceByKeyLocally」:

val result: collection.Map[(String, String), Int] = context 
     .parallelize(Seq(("BLUE", "RED"), ("RED", "GREEN"), ("YELLOW", "ORANGE"))) 
     .map(colorPair => (colorPair, 1)) 
     .reduceByKeyLocally(_ + _) 

reduceByKeyLocally本地映射第一,在本地合併(使用foreachPartition)和調用的作用降低

+0

'.map(colorPair =>(colorPair,1))'會增加出現次數,還是隻將其設置爲1?如果一個給定的節點有2個'(「BLUE」,「RED」)',那麼這個節點的'HashMap'中的出現次數必須是2。因此,你的指令的「1」似乎是奇怪的? –

+1

這是一個經典的「WORD COUNT」場景 - 它爲每個元素創建JHashMap [K,V]併合並它們,使它最終成爲你想要的 - ((「BLUE」,「RED」),n) –

+1

對不起爲了不回答你的問題,但你是正確的,「.map」部分只是將其設置爲1,對於每一對 –

相關問題