【问题标题】:How to subtract in Map Reduce paradigm如何在 Map Reduce 范式中进行减法
【发布时间】:2017-10-25 15:40:56
【问题描述】:

我有以下数据集

s1, s2, count
1, 2, x1
1, 3, x2
1, 4, x3
2, 1, y1
2, 3, y2
2, 4, y3
3, 1, z1
3, 2, z2

我想得到以下输出

s1, s2, count
1, 2, x1-y1
1, 3, x2-z1
1, 4, x3
2, 3, y2-z2
2, 4, y3

这个想法是 s1 是一个比 s2 更受青睐的实体。而且我有这样的元组,使得 s1(比如 = 1)比 s2(比如 = 2)更受青睐 x1 倍,并且 s1(比如 = 2)比 s2(比如 = 1)更受青睐 y1 倍。我需要的是一个 sub O(n^2) 算法来计算 s1 优于 s2 的绝对次数(或其他方式)。 (x1-y1)

问题是有 2.3 亿个这样的元组,我无法使用 O(n^2) 算法来计算它。

一个观察结果是元组在 s1 上排序,因为它们是另一个 MR 输出的结果。

请帮助我找到更好的解决方案。

【问题讨论】:

    标签: hadoop mapreduce distributed-computing emr elastic-map-reduce


    【解决方案1】:

    我不确定我是否理解“偏爱”。看起来您想要减去 s1s2 值相同的值。

    你可以定义一个自定义的Comparable/Writable,我们称之为S1S2Writable,将(s1, s2)封装为一个元组,并声明两个元组相等时

    ((tuple1.s1 == tuple2.s1 && tuple2.s1 == tuple2.s2) ||
        (tuple1.s1 == tuple2.s2 && tuple2.s2 == tuple2.s1))
    

    这样,您可以使用Mapper<S1S2Writable, IntWritable, S1S2Writable, IntWritable> 定义一个进程来读取您的输入文件,并将其传递给Reducer<S1S2Writable, IntWritable, KEYOUT, IntWritable>

    这会将S1S2WritableIterable<IntWritable> 分组,您可以对其执行减法运算。

    【讨论】:

      猜你喜欢
      • 2015-09-09
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2011-06-09
      相关资源
      最近更新 更多