如何在map-reduce范例中进行减法

hivapdat  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(307)

我有以下数据集

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输出的结果。
请帮我找到更好的解决办法。

ac1kyiln

ac1kyiln1#

我不确定我是否理解“偏爱”这个词。看起来好像你想减去 s1 , s2 值相同。
您可以定义自定义 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> ,可以对其执行减法运算。

相关问题