2012-11-24 42 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