首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapReduce问题

MapReduce问题
EN

Stack Overflow用户
提问于 2011-09-07 19:02:35
回答 1查看 2.1K关注 0票数 4

我有一个奇怪的MapReduce问题。

Map函数:

代码语言:javascript
复制
> mp
function () {
    emit(this.ContractID, {qty:this.Qty, qtybs:this.QtyBs});
}

Reduce函数

代码语言:javascript
复制
> red
function (key, values) {
    var sum1 = 0, sum2 = 0;
    values.forEach(function (doc) {sum1 += doc.qty;sum2 += doc.qtybs;});
    return {a:sum1, b:sum2};
}

对7个合同运行MR:

代码语言:javascript
复制
> result = db.fact_payments.mapReduce(mp, red, {out:"myout2", query:{ContractID:{$lte:10000100042}}});
{
        "result" : "myout2",
        "timeMillis" : 670,
        "counts" : {
                "input" : 591,
                "emit" : 591,
                "output" : 7
        },
        "ok" : 1,
}
> db.myout2.find()
{ "_id" : NumberLong("10000000042"), "value" : { "a" : 8331.04, "b" : 253835.07999999996 } }
{ "_id" : NumberLong("10000000084"), "value" : { "a" : 4728.480000000001, "b" : 142879.88000000003 } }
{ "_id" : NumberLong("10000000129"), "value" : { "a" : 25421.859999999997, "b" : 756036.9499999998 } }
{ "_id" : NumberLong("10000000140"), "value" : { "a" : 477292.0000000002, "b" : 477292.0000000002 } }
{ "_id" : NumberLong("10000000148"), "value" : { "a" : 7912.0599999999995, "b" : 237926.87999999998 } }
{ "_id" : NumberLong("10000000165"), "value" : { "a" : 35391.31999999999, "b" : 1074180.95 } }
{ "_id" : NumberLong("10000000171"), "value" : { "a" : 62189.52, "b" : 62189.52 } }
>

一切都很好,所有合约都有结果:)

对所有合同运行MR:

代码语言:javascript
复制
> result = db.fact_payments.mapReduce(mp, red, {out:"myout2", query:{ContractID:{$lte:100100000042}}});
{
        "result" : "myout2",
        "timeMillis" : 26273,
        "counts" : {
                "input" : 295765,
                "emit" : 295765,
                "output" : 7793
        },
        "ok" : 1,
}
> db.myout2.find()
{ "_id" : NumberLong("10000000042"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10000000084"), "value" : { "a" : 4728.480000000001, "b" : 142879.88000000003 } }
{ "_id" : NumberLong("10000000129"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10000000140"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10000000148"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10000000165"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10000000171"), "value" : { "a" : 62189.52, "b" : 62189.52 } }
{ "_id" : NumberLong("10005000172"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10005000173"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10005000189"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10005000191"), "value" : { "a" : 8261.759999999998, "b" : 253916.7 } }
{ "_id" : NumberLong("10005000199"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10005000206"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10005000213"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10010000200"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10010000224"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10010000229"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10010000240"), "value" : { "a" : 32843.32, "b" : 32843.32 } }
{ "_id" : NumberLong("10010000243"), "value" : { "a" : NaN, "b" : NaN } }
{ "_id" : NumberLong("10010000244"), "value" : { "a" : NaN, "b" : NaN } }
has more

具有不同结果的相同合同id:

代码语言:javascript
复制
{ "_id" : NumberLong("10000000042"), "value" : { "a" : 8331.04, "b" : 253835.07999999996 } }

代码语言:javascript
复制
{ "_id" : NumberLong("10000000042"), "value" : { "a" : NaN, "b" : NaN } }

我一点想法都没有。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-08 04:15:38

如果您将最后一行更改为以下代码,则它应该可以工作:

代码语言:javascript
复制
return {qty:sum1, qtybs:sum2};

规则是reduce函数的返回值必须与要发出的第二个参数(这是reduce的输入)具有相同的“形状”,因为reduce的输出被反馈给reduce函数。有关更多详细信息,请参阅http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-ReduceFunction

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7332763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档