编辑:看起来这个概念被称为“转发和收集”。看看这在 Riak-Java 客户端中是如何工作的。
现在在 Riak 中执行一个简单的 MapReduce,它返回一个User
对象键列表。为了简单起见,我想简单地将 a 的值映射User
到键并返回用户列表。这是我到目前为止在 Scala 中得到的(使用 Java 客户端),仅供参考,关键是复合的,看起来像clientId-userId
:
val map = new JSSourceFunction("""
function(riakObject){
var rolek = riakObject.key;
return [rolek];
}
""")
val reduce = new JSSourceFunction("""
function(value){
var returnValue=[], splitarr=[];
for(i=0;i<value.length;i++){
splitarr=String(value[i]).split("-");
returnValue = returnValue.concat([splitarr[1]]);
}
return returnValue;
}
""")
DB.client.mapReduce("rolesOfClientAdmins")
.addKeyFilter(new TokenizeFilter("-", 1))
.addKeyFilter(new MatchFilter(clientId))
.addMapPhase(map)
.addReducePhase(reduce)
.execute().getResult(classOf[String])
我是否在 Reduce 阶段之后添加另一个 Map 阶段?我需要以某种方式更换水桶吗?谢谢您的帮助!