映射 - 减少多个键

时间:2016-10-03 21:18:19

标签: apache-spark mapreduce bigdata

问题

我们有记录,比如r i ,其中i = 0,...,n。 n可能很大(数百亿)。

每个记录都有多个键,k ij ,其中j = 0,...,m。 m很小(比如20)

我们说,r p = r q ,如果k p0 = k q0 ,k p1 = k q1 ,...,,k pm = k qm

即,如果至少有一个键相等,则记录相等。我们需要找到这样的记录集并为这些集合生成唯一的ID。

方法

运行m map-reduce作业,其中每个作业减少一个键。

因此,对于作业i,映射器发出(r p ,k i )和reducer得到({r 1 ,... ,r p },k i

在所有m个作业结束时,我们将拥有一组具有相同键的记录。

S k = {r l }

我们预计k会小于n但仍然可能是数亿,而l是一个小数字(比如2到5000之间)

要获得我们的最终结果,我们需要合并上述至少有一个成员的集合。

我有以下问题:

  1. 如何有效地合并这些集合?
  2. 或者,还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我意识到这是一个ConnectedComponent问题并且有众所周知的解决方案。