我有一个map reduce函数,它对集合有效,如下所示:
function Map() {
emit (
this.name,
{
count : 1,
flag : this.flag
}
);
}
function Reduce(key, values) {
var count = 0;
var flag = false;
for (var i in values){
count = count + 1;
if (i.flag)
flag = true;
}
var reduced = {
count : count,
flag : flag
}
return reduced;
}
function Finalize(key, reduced) {
if (reduced.count>10 || reduced.flag){
var finalized = {
"count" : reduced.count
}
return reduced;
}
return null;
}
我想要做的是Finalize只返回通过某个阈值的对象(例如,计数> 10) . 目前它仍然返回对象,并且计数只是null .
有任何想法吗?
2 回答
我建议您使用聚合框架,因为它更快更容易理解 . 您的上述M / R / F可以像以下一样轻松编写:
哪个回报:
你不能 .
Finalize将只能更改您的值的格式,但您无法取消键(实际上由 Map 阶段发出的指示) .