2014-10-06 168 views
0

在這種映射功能:MongoDB的MapReduce的映射函數

var mapper = function() 
{ 
emit(this.gender,1) 
} 

是什麼1意味着什麼?

+0

您可以看一下[mapReduc e文檔](http://docs.mongodb.org/manual/reference/command/mapReduce/)。它會告訴你一個「映射器」必須「發射」一個「鍵」和一個「值」。在這種情況下'1'是值。你不會在這裏發佈reduce函數,但我想原始開發者的上下文是由「性別」「計數」。也有可能有更好的方法來做到這一點。但是你並沒有發佈完整的代碼或在這裏提出真正的問題。 – 2014-10-06 08:57:25

+0

@NeilLunn你的評論應該是一個答案。 – DanFromGermany 2014-10-06 09:05:39

+0

我的評論是「猜測」,雖然根據所發佈的內容進行了充分的猜測,但信息不足以成爲明確的問題。稍微清楚一點,它至多是一個重複的問題,因此無需回答以前明確回答的問題。一個鏈接到文件,以便OP可以「解決」他們之前編碼的人應該足夠了。 – 2014-10-06 09:09:21

回答

0

它將1(值)添加到密鑰gender

在reduce函數中,您將總結這些函數。

例子:

地圖:

male x 1 
male x 1 
female x 1 
     ^---- this is the "1" you ask for 

減少:

male x2 (sums "male x 1" + "male x 1") 
female x1 
+0

一個長長的囉嗦的方式,實際上並沒有清楚地表明,編寫代碼的人可能只是想按性別「計數」,你不覺得嗎?即使這本身措辭欠佳,甚至沒有真正回答所問的問題。 – 2014-10-06 08:54:23

+0

@NeilLunn在語義上,你計數值。從技術上講,你總結他們。如果你不喜歡我的話,你完全可以自由發表你自己的答案。 – DanFromGermany 2014-10-06 09:05:04

0

的MapReduce是一個遞歸機制,那麼你需要在你的遞歸的基礎。

舉例來說,如果你有這樣的數據:

{"name" : "Tim",  "country" : "USA",  "age" : 15} 
{"name" : "Sandra", "country" : "USA",  "age" : 18} 
{"name" : "Alex", "country" : "France", "age" : 19} 
{"name" : "Zhong", "country" : "Taiwan", "age" : 19} 
{"name" : "Tom",  "country" : "USA",  "age" : 20} 
{"name" : "Marc", "country" : "France", "age" : 20} 
{"name" : "Hao",  "country" : "Taiwan", "age" : 12} 
{"name" : "Jennifer","country" : "USA",  "age" : 15} 
{"name" : "Jean", "country" : "France", "age" : 17} 
{"name" : "James", "country" : "USA",  "age" : 17} 
{"name" : "Peter", "country" : "USA",  "age" : 20} 
{"name" : "Jorge", "country" : "Portugal", "age" : 20} 

如果你想知道由年齡的統計數據,你可以把這個MapReduce的功能:

function(){ 
    return db.Data.mapReduce(

      // Fonction MAP 
      function(){ 
       emit(this.age,{count:1}); 
      }, 

      // Fonction REDUCE 
      function(key,values){ 
       var reduced = {count:0}; 
       values.forEach(function(val) { 
        reduced.count+=val.count; 
       }); 
       return reduced; 
      }, 

      // Configurations 
      { 
       out : 'Stats' 
      }); 
} 

這個圖說明了什麼理論上可以發生在此過程中,發射函數將該值設置爲遞歸性的基礎: Sample for the execution of a MapReduce Job