2012-04-08 49 views
1

讓說我有這種格式的一個非常大的日誌文件唯一的登錄(基於在用戶登錄)計數用的Map Reduce

UserId1 , New York 
UserId1 , New Jersey 
UserId2 , Oklahoma 
UserId3 , Washington DC 
.... 
userId999999999, London 

注意UserId1在紐約先登錄,然後他躥到新澤西州並從那裏再次登錄。

如果我需要獲得多少唯一用戶登錄(意味着2登錄將相同的userid作爲1登錄),我應該如何映射和減少它?

我最初的計劃是,我想首先它映射到這樣的格式:

UserId1, 1 
UserId1, 1 
UserId2, 1 
UserId3, 1 

然後將其降低到

UserId1, 2 
UserId2, 1 
UserId3, 1 

但這樣做會導致輸出爲仍大(特別是如果用戶的普通行爲是每天登錄1次或2次)。還是有更好的方法來實現這一點?

回答

0

我建議利用的自定義鍵在地圖階段。您可以參考教程here來撰寫和使用自定義鍵。自定義鍵應該有兩個部分1)userid 2)placeid。所以基本上在mapper階段你正在這樣做。

emit(<userid, place>, 1) 

在縮小階段,您只需訪問密鑰並分別發出密鑰的兩部分。