gpt4 book ai didi

mongodb - MapReduce 与 MongoDB - reduce 运行了多少次?

转载 作者:可可西里 更新时间:2023-11-01 09:59:44 25 4
gpt4 key购买 nike

我在 MongoDB 中使用 MapReduce,我想我已经全神贯注了,除了有一点我仍然不明白:reduce 运行了多少次?

例如,我有一个“项目”集合,每个项目都有一个“类别”。这是测试数据(用 javascript 编写,用于 node.js 单元测试):

var i = 0;
var dummyCategories = [
{ categoryId:(++i), categoryName:'Category '+i }, // [0] 1
{ categoryId:(++i), categoryName:'Category '+i }, // [1] 2
{ categoryId:(++i), categoryName:'Category '+i }, // [2] 3
{ categoryId:(++i), categoryName:'Category '+i }, // [3] 4
{ categoryId:(++i), categoryName:'Category '+i } // [4] 5
];

i=0;
var dummyItems = [
{ itemId: 'TestItem' + (++i), title: 'Test Item ' + i, // [0] 1
category: dummyCategories[0]
},
{ itemId: 'TestItem' + (++i), title: 'Test Item ' + i, // [1] 2
category: dummyCategories[1]
},
{ itemId: 'TestItem' + (++i), title: 'Test Item ' + i, // [2] 3
category: dummyCategories[2]
},
{ itemId: 'TestItem' + (++i), title: 'Test Item ' + i, // [3] 4
category: dummyCategories[3]
},
{ itemId: 'TestItem' + (++i), title: 'Test Item ' + i, // [4] 5
category: dummyCategories[4]
},
{ itemId: 'TestItem' + (++i), title: 'Test Item ' + i, // [5] 6
category: dummyCategories[0]
}
];

有 6 个项目,5 个类别,其中一个类别出现两次,其余类别出现一次。

在我的 map 函数中,我发出了 (this.category.categoryId, { items: 1 });。 (此完整版本包括值对象中除项目数之外的其他指标,但无论哪种方式,此行为都是相同的。)

我的reduce 函数如下所示:

function reduce(key, values) {
var totals = {
items: 0
};

for (var i = 0; i < values.length; i++) {
totals.items += values[i].items;
}

return totals;
};

(map 中的输出结构与 reduce 中的输出结构相同,这是需要的。)

所以我使用 verbose=true 通过 mapReduce 运行它,它显示了这些统计数据:

计数:{ 输出:5,发出:6,减少:1,输入:6}

input:6 有意义,有 6 个文档。emit:6 是有道理的,它为每个文档发出 1 个类别。output:5 有意义,有5个类别。但为什么 reduce 只运行一次?

现在写出来,它似乎正在为出现不止一次的每个发出的键运行 reduce。因此,当一个键只发出一次时,它不会减少它。那是对的吗?确定减少运行次数的数学公式是什么?

谢谢!

最佳答案

是的,您是正确的,如果 key 只发出一次,则 reduce 不会运行。我不认为存在一个数学公式可以告诉你 reduce 将运行多少次。

关于mongodb - MapReduce 与 MongoDB - reduce 运行了多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11121299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com