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 函数进行新开发。
我想使用 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 函数进行新开发。