Riak MapReduce 在单节点中使用 javascript 和 python

Riak MapReduce in single node using javascript and python

我想使用 javascript 对 Riak DB 中的数据执行 MapReduce 作业。但是一开始就卡住了,我无法理解它的价值 return。

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和user包含RiakDB中的五组数据。 我认为 map() return 是单个值,但它是 return 具有 5 个值的数组,我认为相当于 RiakDB 中的五组数据。

1
1
1
1
1

而这里,为什么我只能return数组?它独立处理每个数据集,每个数据集 returns。所以我想我有五个 1。由于这个原因,当我在 map() 中处理获取的数据时,returns 给了我意想不到的结果。

所以请给我一些建议。我认为这是基本的事情,但我无法理解。我非常感谢你的帮助。

当您 运行 一个 MapReduce 作业时,映射阶段代码被发送到存储数据的 vnode,并为数据中的每个值执行。生成的数组被收集并传递给一个单一的 reduce 阶段,它也是 return 一个数组。如果结果足够多,reduce阶段可能运行多次,以之前的reduce结果和一批map结果作为输入

您得到 5 个结果意味着在您的存储桶中看到了 5 个密钥。 map phase function 的实例之间没有共享全局状态,所以每个实例都会有一个独立的 i,这就是为什么每个结果都是 1.

您可以尝试 returning [v.key] 以便每个值都有独特的东西,或者如果预期值很小,您可以 return [JSON.stringify(v)] 这样您就可以看到传递给地图的整个结构。

您应该注意到,根据 docs site javascript Map Reduce 已被正式弃用,因此您可能希望使用 Erlang 函数进行新开发。