Adi*_*dil 8 javascript reduce mapreduce map mongodb
我试图在Mongo shell中做一个简单的map reduce,但是reduce函数永远不会被调用.这是我的代码:
db.sellers.mapReduce(
function(){ emit( this._id, 'Map') } ,
function(k,vs){ return 'Reduce' },
{ out: { inline: 1}})
Run Code Online (Sandbox Code Playgroud)
结果是
{
"results" : [
{
"_id" : ObjectId("4da0bdb56bd728c276911e1a"),
"value" : "Map"
},
{
"_id" : ObjectId("4da0df9a6bd728c276911e1b"),
"value" : "Map"
}
],
"timeMillis" : 0,
"counts" : {
"input" : 2,
"emit" : 2,
"output" : 2
},
"ok" : 1,
Run Code Online (Sandbox Code Playgroud)
}
怎么了?
我在Ubuntu 10.10上使用MongoDB 1.8.1 32位
Tom*_*icz 18
ekhem的目的reduce是将与给定键相关联的值集合减少为一个值(聚合结果).如果您只为每个MapReduce键发出一个值,则不需要reduce,所有工作都已完成.但是如果你为给定的两个对发出,则会调用reduce:_id
emit(this._id, 'Map1');
emit(this._id, 'Map2');
Run Code Online (Sandbox Code Playgroud)
这将使用以下参数调用reduce:
reduce(_id, ['Map1', 'Map2'])
Run Code Online (Sandbox Code Playgroud)
_id在过滤数据集时,您更可能希望使用MapReduce键:emit仅当给定记录满足某些条件时才使用.但同样,reduce在这种情况下不会被调用,这是预期的.
好吧,如果只有一个值,MongoDB不会在密钥上调用Reduce函数.
在我看来,这很糟糕.应该留给我的reducer代码来决定是跳过一个奇异值还是对它进行一些操作.
现在,如果我必须对奇异值进行一些操作,我最终会编写finalize函数,并且在finalize中,我尝试区分哪个值已经通过reducer或哪个没有.
我很确定,在Hadoop的情况下不会发生这种情况.
| 归档时间: |
|
| 查看次数: |
3560 次 |
| 最近记录: |