我正在研究map reduce程序,并正在考虑设计计算形式,其中a1, b1
是与键相关的值
a1/b1, a1+a2/b1+b2, a1+a2+a3/b1+b2+b3 ...
所以在减速机的每个阶段,我都需要之前的值。如果在每个阶段只能读取与特定键相关的值,那么如何将其设计为map reduce呢?
如果你觉得这个问题不清楚,你能给我讲讲这个一般性的问题吗?
更一般的问题:如何在map约简中使用递归来开发斐波那契级数?
编辑
你能帮我修改一下我的设计吗
key1, V1,V2,V3
Key2, V4,V5,V6
映射器输出
Key1_X V1
Key1_Y V2
Key2_X V4
Key2_Y V5
减速器输出
Key1_X {V1,.....}
Key1_Y {V2,.....}
类似地,现在在映射器的下一个阶段。我可以像这样创建一个列表吗?
key1 {V1,....} {V2,....}
Key2 {V4,....} {V5,....}
我这样做的原因是为了执行:
Key1 {V1/V2, V1+V6/V2+V7, V1+V6+..../V2+V7+.. , .........}
这是可能的吗?因为数据集非常大,所以我认为使用map reduce会更好。
改变设计是否有助于提高效率?
Fibonacci的主要问题(正如您在具体问题中指出的那样)是数列中所有项之间的依赖性。如果不先计算前面的项,就不能计算后面的项。
MapReduce是非常好的IFF,你可以把你的任务分成独立的部分。
我找不到一个简单的方法来做这件事。
所以任何"强迫"MapReduce解决这个问题的构造都会破坏可伸缩性的优势。因此,用你最喜欢的编程语言编写一个简单的高度优化的循环将胜过任何MapReduce算法。
编写您的映射器/reducer来计算以下三件事:
the sum of a_i
the sum of b_i
their ratio