2015-11-02 58 views
0

假設我想查找每個單詞在某些文本中出現的次數。在MapReduce中,爲什麼map函數在查找單詞出現時輸出1?

我的理解是文本被分成幾部分,每一部分都被傳遞給map。然後map會得到字出現的每個部分,並將結果傳遞到reduce,像這樣:

for each word w in document: 
    occurrences[w] += 1 

return occurrences 

然而,根據MapReduce paperwikipediamap只會發出1對每個字,例如:

for each word w in document: 
    emit(w, 1) 

這不就是因爲它將不得不遍歷每個單詞反正直接將文本部分傳遞到reduce是同樣的事情?

此外,只是爲了確保。如果我想用MapReduce對大數組進行排序,map是否將其排序爲數組的一部分,然後reduce會合並排序後的數組,如mergesort?

回答

1

只是爲了回顧一下如何的map-reduce作品:

在字數例子,你引,地圖讀取分流/節,你提到的。

在掃描單詞部分時,地圖不會執行發生次數, 地圖正在做的是創建一個<"word",1>的鍵值對。這簡化了縮減器對單詞的下游聚合。

該映射正在這樣做,以便處理該特定處理的reducer可以收集所有發送的<"word",1>元組,然後通過將所有1加在一起來生成計數。

總之,可以說你有一個單詞列表如下:

cat 
rat 
mat 
bat 
cat 
sat 
bat 

比方說,我們有3名映射器可處理的文件分割如下:

分割1爲mapper1:

cat 
rat 
mat 

Split2爲mapper2:

bat 
cat 

Split3爲mapper3:

sat 
bat 

的mapper1將發出:

<cat,1> 
<rat,1> 
<mat,1> 

Mapper2將發出:

<bat,1> 
<cat,1> 

Mapper3將發出:

<sat,1> 
<bat,1> 

鋁儘管現實情況稍微複雜一些,但理想情況下,每個單詞都有一個縮減器,並且他們從每個映射器接收元組。

So reducer for cat receives:<cat,1> , <cat,1> 
The reducer for rat receives: <rat,1> 
The reducer for mat receives: <mat,1> 
The reducer for bat receives: <bat,1>,<bat,1> 
The reducer for sat receives: <sat,1> 

將減速加起來,它已收到的所有元組和如下得到的總價值:

<cat,2> 
<rat,1> 
<mat,1> 
<bat,2> 
<sat,1> 

這是如何的map-reduce實現了字計數。這個想法是並行計數操作。

就你的排序問題而言,它比「合併」更像是一種「分水嶺」技巧。 map-reduce框架將在內部對數據進行排序,並按照排序順序將其傳輸到reducer。

有關更多詳細信息,請檢查此post

+0

喂,讓我們說split1包含'cat','cat','mat'。爲什麼我不配置地圖發出'',''而不是'','',''?謝謝 – mzee99

+1

@ mzee99 - 你可以。但是,這將需要你的地圖持續爲你的每個單詞說明狀態。組合器(https://hadooptutorial.wikispaces.com/Custom+combiner)通常用於執行您提到的步驟。 –

+0

單向或雙向效率方面是否存在差異? – mzee99

0

如果你想Mapper想做減速機工作通過發射,使用Combiner,這是半減速器。 Combiner在Mapper的輸出上工作,並在這裏執行reducer作業。

如果您實施客戶分區器,Shuffler和Reducer:它會更有效。

分隔器將確保減速器的負載均衡。

洗牌將確保一個特定的鍵映射器發射到一個特定的減速器。

組合器將做迷你減速機作業和Mapper的組合輸出。

排序將在到達Reducer之前對Mapper輸出的所有值進行排序。

在組合器的情況下,大部分時間組合器&減速器類將被設置爲相同的類。

即使組合器,輸出將是W,[1,1]代替W,[2]

//Set Combiner class as WordcounReducer class. 
job.setCombinerClass(WordcountReducer.class); 
job.setReducerClass(WordcountReducer.class); 

看一看詳細example和這個SE question和這一個SE Question 2

相關問題