2017-08-01 52 views
0

我嘗試瞭解MapReduce如何在最簡單的示例上工作:wordcount。MapReduce wordcount獲得唯一密鑰

取句「我是新手,我吃土豆」。

我把它分成兩部分,「我是新手」和「我吃馬鈴薯」,我發給兩位製圖員。這些映射器回答我:

I --> 1 
am --> 1 
a --> 1 
newbie --> 1 

的第一個和

and --> 1 
I --> 1 
eat --> 1 
a --> 1 
potato --> 1 

的第二個。

所以現在,在主,我有這樣的數據:

I --> 1 
am --> 1 
a --> 1 
newbie --> 1 
and --> 1 
I --> 1 
eat --> 1 
a --> 1 
potato --> 1 

但我減速帶在進入一個地圖也就是說,關鍵是獨一無二的。所以我必須將我得到的數據轉換爲:

I --> 1, 1 
am --> 1 
a --> 1, 1 
newbie --> 1 
and --> 1 
eat --> 1 
potato --> 1 

然後我的減速器只是對數字進行求和。

看來這是算法中最重要的部分,因爲這裏所有的工作都完成了。非常令人驚訝的是,我在互聯網上找不到任何有關這方面的信息。他們都提供圖形和圖表的階段「排序和洗牌」(其中洗牌只是發送數據到右側的減速器和排序是按鍵排序?),但沒有更多。

這個階段是如何工作的?誰在照顧這個?這是映射的另一個階段,還是主人自己做這項工作?

回答

0

如果我正確理解你,你想加上每個鍵的數字?

您當前有一個單詞數組:arrayOfNumbers對,您想要地圖到單詞數組:totalOccurrances對。

您將必須減少每個arrayOfNumbers爲totalOccurrances。

所以像

keyArrayPairs.map(array => array.reduce((result, value) => result + value, 0)) 

編輯

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce 當您減少一個對象,其中一個參數來解決功能是關鍵。你可以這樣做

array.reduce((result, value, word) => { 
    if(result[word]){ 
    result.push(value[0]) 
    }else{ 
    result[word]=value 
    } 
    return result 
},{}) // Empty object 
+0

我有一個字數組:arrayOfNumbers,其中所有arrayOfNumbers是[1]所以總結它有totalOccurances不會做任何事情。 – fazega

+0

(我不想總結它,我想按鍵收集它,這有點不同。) – fazega

+0

您的編輯 - >這意味着我不能將它分成兩個不同的減速器,我必須減少所有的數據一次(設想一個文本而不是這個簡短的句子,它會很長)。 – fazega

0

所以我要我必須將數據轉換成這樣:

不,你不知道! MapReduce爲你做這件事。您只需提供一張地圖和一個縮小功能,以便爲每個階段創建適當的鍵和值。您將在地圖功能(key = word,value = 1)中創建的輸出鍵就是您所要做的。然後,MapReduce(不是你)將按鍵對這些鍵值對進行分組,並且在reduce函數中,您只需定義您想要對每組具有相同鍵的鍵值對進行的操作。,所有的1都被分組爲同一個單詞)。答案是你想總結它們,以便得到每個單詞的最終頻率。

此外,聲明:

所以現在,在主,我有這樣的數據:

是錯誤的。主人對關鍵值對沒有任何瞭解。如果你不在集羣上工作,想象集羣中的每臺計算機只知道同一個節點已經處理了什麼,而沒有更多。請多閱讀一下關於MapReduce的工作原理,如果第一次沒有得到它,請不要擔心。習慣這種邏輯需要一段時間。你應該總是試圖將你的程序看作是在集羣上運行的分佈式程序,而不是在一臺計算機上運行。

+0

誰是「MapReduce」? MapReduce是一種算法,不是一個人或一個軟件!我沒有使用任何框架。如果你的答案是「使用Hadoop,排序階段將爲你完成」,那麼這絕對不是我想要的。第二部分是無意義的,因爲同樣的原因:主人是我的服務器,所以我很確定我得到這個數據(它只是一個NodeJs服務器) – fazega

+0

謝謝你讓我知道什麼是MapReduce。我真的認爲這是一個人。你似乎已經找到了答案。祝你好運,併爲我的廢話道歉! – vefthym

+0

還沒有找到答案呢:(我敢肯定你理解我的觀點,「然後,MapReduce(不是你)將按鍵組合這些鍵值對」並不意味着什麼,誰是「MapReduce」你在說什麼?我只有一個帶有函數映射和函數的js文件,只不過這個工作必須在某個地方完成(對鍵值對進行分組)。 – fazega