MapReduce结果似乎限于100?

use*_*867 8 python mapreduce mongodb pymongo

我正在玩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;
}
Run Code Online (Sandbox Code Playgroud)

记录计数为99时的MR输出:

{u'_id': u'superiors', u'value': {u'count': 99}}
Run Code Online (Sandbox Code Playgroud)

记录计数为101时的MR输出:

{u'_id': u'superiors', u'value': {u'count': 2.0}}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Joh*_*yHK 3

您的reduce函数应该对值进行求和count,而不仅仅是1对每个值进行相加。否则 a 的输出reduce无法正确用作另一个 的输入reduce。试试这个:

var R = function (key, values) {
  var sum = 0;
  values.forEach(function(x) {
    sum += x.count;
  });
  var result = {
    count : sum 
  };
  return result;
}
Run Code Online (Sandbox Code Playgroud)