我有一个4个riak节点加载数据的集群。我正在尝试执行一个简单的MapReduce作业,但是我试图通过提供自己的javascript函数(为了移动到更多涉及MapReduce作业)来完成作业。Riak MapReduce Javascript奇怪的输出
我相关的Java代码是:
IndexQuery iq = new IntRangeQuery(IntIndex.named(indexId), bucketId, 11, 40);
Function mapfunc = new JSSourceFunction(
streamToString(MapReduceDriver.class.getResourceAsStream("/map_1.js")));
Function redfunc = new JSSourceFunction(
streamToString(MapReduceDriver.class.getResourceAsStream("/reduce_1.js")));
PBMapReduceResult result = (PBMapReduceResult) riakClient.mapReduce(iq)
.addMapPhase(mapfunc)
.addReducePhase(redfunc)
.execute();
当两个JavaScript功能是:
function map_keepAttr(value, keyData, arg) {
var data = Riak.mapValuesJson(value)[0];
return [ data.Attribute_17 ];
}
function reduce_aggregate(values, arg) {
return [values.length];
}
我看到的问题是:有是所生产的正是30个值我查询和地图阶段。但减少阶段报告3而不是30(因此不能正确计数)。更奇怪的是,当我使用以下reduce函数时:我得到了预期的结果,即包含正好30个条目的json数组。
任何帮助都会救我,因为我似乎没有得到Riak中的MapReduce如何工作。
谢谢!
你发现问题到底是什么!一旦我添加了重新减少的逻辑(即占了不同的格式),一切都像魅力一样工作!谢谢! – gpol