2012-11-24 41 views
0

我正在爲MongoDB編寫一個MapReduce代碼(很明顯,在JavaScript中)。在減少代碼中,它看起來像我總是返回一些值(這與發射相同)?我找不到一種方法,但如果我可以停止在reduce函數中發佈記錄,我的代碼可以更簡單,所以我想知道。我可以停止從Reduce功能發出嗎?

回答

0

我相信發射是完全可選的(順便說一句,「返回」地圖中的值不應該做任何事情)。只是不要發射你的映射函數內的結果將不會使其減少功能

+0

David,我的問題是來自reduce函數,而不是來自map函數。 – kee

+0

@kee啊有趣。你能發佈一個你正在使用的簡單樣本嗎? –

0

我想了解你來自哪裏。

MR的基本原理是Map Reduce。如果您的MR沒有縮小功能,就沒有輸出。因爲總是期望這樣的減少功能。

確實如果你從map函數發出一行,那麼reduce就不需要運行。然而,對於MR完全運行,它必須調用reduce函數,否則沒有輸出使得MR毫無意義。

在reduce代碼中,它看起來像我總是返回一些值(這與發出相同)?

是的,這是因爲MR在數學上的工作原理:http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Amoretechnicalexplanation你可以在那裏看到它的基本解釋。 MongoDB希望像這樣運行它,它只支持這種方法。

+0

也許它不清楚,但我不是說沒有減少產量。只是在某些情況下,我不想發射。就像我說的,我有辦法通過後期處理來解決這個問題,但我只是想知道是否有辦法發出或不發送有條件的東西。這在Hadoop MapReduce編程範例中是可行的。甚至在Hadoop MapReduce中也沒有減少(如果地圖輸出是你想要的)。 – kee

+0

@kee我仍然對這裏的場景感到困惑,但是答案是否定的,如果reduce函數沒有輸出,我相信MongoDBs JS引擎會輸出一個錯誤。如果你想要地圖輸出,你可以爲它做一個簡單的劃線。 – Sammaye