【问题标题】:Riak MapReduce in single node using javascript and python使用javascript和python在单节点中的Riak MapReduce
【发布时间】:2016-09-22 14:57:17
【问题描述】:

我想使用 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);

为简单起见,我检查了上面的示例。

这里查询是桶和用户包含RiakDB中的五组数据。 我认为 map() 返回单个值,但它返回具有 5 个值的数组,我认为相当于 RiakDB 中的五组数据。

1
1
1
1
1

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

所以请给我一些建议。我认为这是基本的东西,但我无法得到它。我非常感谢您的帮助。

【问题讨论】:

    标签: javascript python dictionary riak


    【解决方案1】:

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

    您获得 5 个结果这一事实意味着在您的存储桶中看到了 5 个密钥。 map阶段函数的实例之间没有共享全局状态,因此每个实例都会有一个独立的i,这就是为什么每个结果都是1。

    您可以尝试返回[v.key],以便为每一个设置独特的内容,或者如果预期值很小,您可以返回[JSON.stringify(v)],以便查看传递给地图的整个结构。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多