我正在尝试使用riak-ruby-client编写一个riak map reduce。 Javascript reduce函数如下所示:
arr.reduce(callback,[initialValue]);
我正在做这样的事情:
map_reduce = Riak::MapReduce.new(Ripple.client)
map_reduce.add(bucket) // I have passed a valid bucket
var callback = "function(previous, current){return previous + current;}"
results = map_reduce.map(map_func).reduce(callback,1,:keep=>true).run //1 is the initial value as in javascript reduce func.
但是riak并没有将1作为初始值。有人可以告诉我如何传递初始值以减少阶段??
答案 0 :(得分:0)
reduce阶段函数有两个参数,第一个是输入列表,包含先前reduce阶段迭代的输出以及前一个map / input阶段的一批输出。第二个参数是每次执行reduce阶段函数时传递的配置参数。这在Riak MapReduce documentation。
中有更详细的描述由于reduce阶段函数需要是可交换的,关联的和幂等的,因此无法可靠地识别哪个是第一次迭代,因此无法设置初始值。