我在 MongoDB 和 python 中使用 Map Reduce,但遇到了一个奇怪的限制。我只是想计算“书”记录的数量。它在少于 100 条记录时有效,但当超过 100 条记录时,由于某种原因计数会重置。
这是我的 MR 代码和一些示例输出:
var M = function () {
book = this.book;
emit(book, {count : 1});
}
var R = function (key, values) {
var sum = 0;
values.forEach(function(x) {
sum += 1;
});
var result = {
count : sum
};
return result;
}
记录数为99时的MR输出:
{u'_id': u'superiors', u'value': {u'count': 99}}
记录数为101时的MR输出:
{u'_id': u'superiors', u'value': {u'count': 2.0}}
有什么想法吗?
最佳答案
您的 reduce
函数应该对 count
值求和,而不仅仅是为每个值添加 1
。否则,一个 reduce
的输出不能被正确地用作另一个 reduce
的输入。试试这个:
var R = function (key, values) {
var sum = 0;
values.forEach(function(x) {
sum += x.count;
});
var result = {
count : sum
};
return result;
}
关于python - MapReduce 结果似乎限制为 100?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318791/