我正在研究地图缩减程序,并正考虑设计表格的计算,其中a1, b1
是与键相关联的值
a1/b1, a1+a2/b1+b2, a1+a2+a3/b1+b2+b3 ...
因此,在减速器的每个阶段,我都需要先前的值。 如何将此设计为地图减少,因为在每个阶段只能读取与特定键相关联的值。
如果您觉得问题不明确,可否指导我解决这个一般性问题?
更一般的问题:如何在map reduce中使用递归来开发Fibonacci系列?
你能帮我修改我的设计
吗? 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会更好。
更改设计有助于提高效率吗?
答案 0 :(得分:6)
Fibonacci的主要问题(正如您在特定问题中所指出的那样)是系列中所有术语之间的依赖关系。 如果不首先计算先前的术语,则无法计算后面的术语。
MapReduce是非常好的IFF你可以将你的工作分成独立的部分。
我看不到一种简单的方法。
因此任何“强制”MapReduce解决此问题的构造都将破坏可扩展性优势。因此,您喜欢的编程语言中的一个简单的高度优化循环将胜过任何MapReduce算法。
答案 1 :(得分:0)
编写mapper / reducer来计算这三件事:
the sum of a_i
the sum of b_i
their ratio