我想使用javascript对Riak DB中的数据执行MapReduce作业。但陷入一开始,我无法理解它是如何返回价值的。你知道吗
client = riak.RiakClient()
query = client.add('user')
query.map("""
function(v){
var i=0;
i++;
return [i];
}
""")
for result in query.run():
print "%s" % (result);
为了简单起见,我检查了上面的例子。你知道吗
这里的查询是bucket,用户在RiakDB中包含五组数据。 我认为map()返回一个值,但它返回一个值为5的数组,我认为这相当于RiakDB中的五组数据。你知道吗
1
1
1
1
1
在这里,为什么我只能返回数组?它独立地处理每个数据集,并为每个数据集返回。所以我想我有五个1。由于这个原因,当我在map()中处理提取的数据时,返回的结果会给我带来意想不到的结果。你知道吗
所以请给我一些建议。我认为这是基本的东西,但我不能得到它。我非常感谢你的帮助。你知道吗
运行MapReduce作业时,映射阶段代码将发送到存储数据的vnodes,并针对数据中的每个值执行。结果数组被收集并传递到单个reduce阶段,该阶段还返回一个数组。如果有足够多的结果,reduce阶段可以运行多次,并将先前的reduce结果和一批map结果作为输入。你知道吗
事实上,你得到了5个结果,这意味着在你的桶中看到了5个键。map phase函数的实例之间没有共享的全局状态,因此每个实例都有一个独立的
i
,这就是为什么每个结果都是1
。你知道吗您可以尝试返回
[v.key]
,这样每一个都有独特的内容,或者如果期望值很小,则可以返回[JSON.stringify(v)]
,这样就可以看到传递到映射的整个结构。你知道吗您应该注意到,根据docs sitejavascript Map Reduce已经被正式弃用,因此您可能希望使用Erlang函数进行新的开发。你知道吗
相关问题 更多 >
编程相关推荐