有使用mongodb的进来聊聊了。关于mapreduce的问题

2012-02-29 20:44:59 +08:00
 avatasia
今天研究在mongodb里加js,然后在mapreduce里调用js。
1. finalize里貌似不能使用外部定义的js,但是在finalize里可以自己写js, 例如扩展array。
2. mapreduce的reduce会产生冗余数据,但是最后finalize的时候,冗余被处理掉了,想求原理。

我做了个测试:
m = function Map() {
emit(this.PEPDATE, {TRANNUM: this.TRANNUM});
}

r = function Reduce(key, values) {
var trannum = 0;
var result = {TRANNUM: 0};
values.forEach(function(v){
trannum += v.TRANNUM;
result.TRANNUM += v.TRANNUM;
});
log(key, trannum);
return result;
}

f = function Finalize(key, reduced) {

return reduced;
}

log的定义:
function (i,j) {
db.log.save({key:i, value: j});
}

log出来的结果
key value
20120130 5081
20120130 3386
20120130 3530
20120130 3880
汇总值是 15877

finalize后的值是 15874, 这多余的3 怎么被处理掉了,求解惑。
难道奥秘就在于 var result,这个mr全局变量么?
4647 次点击
所在节点    问与答
21 条回复
avatasia
2012-03-01 15:41:32 +08:00
去掉splice 53136.

找了网上的一个数组去重算法

http://www.webshowme.com/04js/content.asp?id=2350

结果是 13707.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/28449

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX