Javascript JS中的Riak Map Reduce返回有限的数据
因此,我在2个Javascript JS中的Riak Map Reduce返回有限的数据,javascript,mapreduce,riak,Javascript,Mapreduce,Riak,因此,我在2个EC2服务器上运行Riak,使用python运行javascriptMapreduce。它们已聚集在一起。主要用于“概念证明” bucket中有50个键,map/reduce函数所做的就是重新格式化数据。这仅用于测试Riak中的map/reduce功能 问题:输出仅显示[{u'e':2,u'undefined':2,u'w':2}]。 这是完全错误的。日志显示所有的键都有 “已处理”,但仅返回2个。所以我的问题是为什么会这样 我错过了一些重要的事情 代码: 打印结果: [{u'e'
EC2
服务器上运行Riak
,使用python运行javascriptMapreduce
。它们已聚集在一起。主要用于“概念证明”
bucket中有50个键,map/reduce函数所做的就是重新格式化数据。这仅用于测试Riak中的map/reduce功能
问题:输出仅显示[{u'e':2,u'undefined':2,u'w':2}]。
这是完全错误的。日志显示所有的键都有
“已处理”,但仅返回2个。所以我的问题是为什么会这样
我错过了一些重要的事情
代码:
打印结果:
[{u'e': 2, u'undefined': 2, u'w': 2}]
这没有任何意义为了避免在运行reduce阶段之前必须将前一阶段的所有数据加载到协调节点上的内存中(这对于大型mapreduce作业来说是有问题的),reduce功能会运行多次。每个迭代都会从前一个阶段获得一批结果,以及早期reduce阶段迭代的任何输出。默认批量大小为20,但这是。由于一次reduce-phase迭代的结果将作为下一次迭代的输入,因此需要设计reduce-phase函数来处理此问题
通过指定“reduce_phase_only_1”参数,也可以强制Riak对整个输入集只运行一次reduce phase,但通常不建议这样做,尤其是对于大型作业。日志似乎表明一次只有20个项“reduce”。为什么?谢谢。。。您是否有python和JS中“reduce函数多次运行”的示例。这仍然有点令人困惑。由于reduce phase函数的输入可能包含map phase值和previous reduce phase输出的混合,因此不能假设传入reduce函数的所有值都来自previous map phase,除非输入格式与reduce phase中的输出格式相同,例如,要汇总的数字。否则,在处理之前,您需要查看每个值并确定它是否来自地图pahse。谢谢@christian dahlqvist。是否有实际的代码示例?看到它付诸实践会很有帮助的。非常感谢@christian dahlqvist。我整天都在用reduce函数处理不正确的数据。我的测试用例只使用了20个项目,所以我只看到了生产代码中的错误。
[{u'e': 2, u'undefined': 2, u'w': 2}]