【问题标题】:Recursive calculations using Mapreduce使用 Mapreduce 进行递归计算
【发布时间】:2011-07-15 20:46:39
【问题描述】:

我正在研究 map reduce 程序,并正在考虑设计以下形式的计算,其中a1, b1 是与键关联的值

  a1/b1, a1+a2/b1+b2, a1+a2+a3/b1+b2+b3 ...

所以在 reducer 的每个阶段,我都需要之前的值。 如何将其设计为 map reduce,因为在每个阶段只能读取与特定键关联的值。

如果你觉得这个问题不清楚,你能指导我回答这个一般性问题吗?

更一般的问题:如何在 map reduce 中使用递归开发斐波那契数列?

编辑

你能帮我修改一下设计吗

 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比较好。

改变设计是否有助于提高效率?

【问题讨论】:

  • 除法运算符两边的术语周围是否有不可见的括号?
  • 更改问题的措辞不会改变您正在解决的问题的根本问题。我仍然认为 MR 对于这类问题效率低下。

标签: java hadoop mapreduce


【解决方案1】:

斐波那契的主要问题(正如您在具体问题中所指出的那样)是该系列中所有术语之间的依赖关系。 如果不先计算前面的项,就无法计算后面的项。

MapReduce 非常好,如果你可以将你的工作分成独立的部分。

我没有看到一个简单的方法来做到这一点。

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

【讨论】:

【解决方案2】:

编写你的映射器/归约器来计算这三件事:

the sum of a_i
the sum of b_i
their ratio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2018-09-19
    • 2022-11-14
    相关资源
    最近更新 更多