2012-07-03 52 views
1

我是地圖縮減設計的新手。我使用mongodb作爲後端和映射減少引擎。地圖Reduce算法設計(mongodb首選)

在一個簡單的數據集,如:

day, value 

其中值是-1,0或1,我想持續時間增加,其中持續時間是連續天數的值等於每一行1或-1。

爲例輸入數據集:

 day| value 
2012-01-01| 1 
2012-01-02| 1 
2012-01-03| 1 
2012-01-04| -1 
2012-01-05| -1 
2012-01-06| 0 
2012-01-07| 1 
2012-01-08| 1 

輸出應該是:

 day| value | Duration 
2012-01-01| 1 | 0 
2012-01-02| 1 | 1 
2012-01-03| 1 | 2 
2012-01-04| -1 | 0 
2012-01-05| -1 |-1 
2012-01-06| 0 | 0 
2012-01-07| 1 | 0 
2012-01-08| 1 | 1 

是在地圖這是否可行減少工作嗎?

回答

1

有人糾正我,如果我錯了,但這對於MapReduce看起來不可行。我不確定MongoDB是如何處理輸入到其映射器的分區的,但如果我沒有記錯的話,依賴於以前對一個映射器塊之外的數據的瞭解的任務對於MapReduce來說是不可能的。

MR有可能在某個塊內完成這項工作。假設01/01到01/02的天數發送給一個映射器(從你的例子)。當然,你可以意識到這兩天在連續的價值中是一樣的。

但是,如果另一個mapper得到01/03到01/04天呢?這個映射器不會知道第1天和第2天之前它與第3天具有相同的值,所以它只會輸出其持續時間爲0的數據。無法從另一個映射器獲取數據,就像我一樣可以看到。

只用直接的java編碼就可以做到這一點。

+0

感謝,似乎可能像你說的,如果我用最大值(例如3天)限制持續時間,我每天發出3個值(低效但至少分佈)。現在,我會像你所建議的那樣去做一個很好的舊迭代。 – nomoa