使用Mapreduce进行递归计算

时间:2011-07-15 20:46:40

标签: java hadoop mapreduce

我正在研究地图缩减程序,并正考虑设计表格的计算,其中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会更好。

更改设计有助于提高效率吗?

2 个答案:

答案 0 :(得分:6)

Fibonacci的主要问题(正如您在特定问题中所指出的那样)是系列中所有术语之间的依赖关系。 如果不首先计算先前的术语,则无法计算后面的术语。

MapReduce是非常好的IFF你可以将你的工作分成独立的部分。

我看不到一种简单的方法。

因此任何“强制”MapReduce解决此问题的构造都将破坏可扩展性优势。因此,您喜欢的编程语言中的一个简单的高度优化循环将胜过任何MapReduce算法。

答案 1 :(得分:0)

编写mapper / reducer来计算这三件事:

the sum of a_i
the sum of b_i
their ratio