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

标签 javascript python dictionary riak

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

1
1
1
1
1

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

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

最佳答案

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

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

您可以尝试返回[v.key],以便每个值都有唯一的东西,或者如果预计值很小,您可以返回[JSON.stringify( v)],这样您就可以看到传递给 map 的整个结构。

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

关于javascript - 使用 javascript 和 python 在单节点中进行 Riak MapReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642462/

相关文章:

javascript - 悬停时用两个按钮覆盖表格单元格

用于项目列表的 Python,到单个字符串?

python - 如何在Python中使用zip和map编写csv文件?

javascript - 为什么使用 '*' 作为 postMessage 的 targetOrigin 存在安全风险?

javascript - Aurelia DI 通过抽象基和/或接口(interface)获取类的实例

javascript - Lodash _.filter 函数只能满足一个条件

python - 使用 xlsxwriter 将数据框导出到 Excel 文件

python - Logilab 与 Python 27 windows 的兼容性吗?

ios - MKPinAnnotationView 下载的图像 (@3x) 不适用于 6+

python - 在 Python 中 append 关联数组