使用MapReduce查找大整数集的中位数

时间:2011-08-06 16:41:00

标签: mapreduce

是否有一个快速算法在MapReduce框架上运行,以从一个巨大的整数集中找到中位数?

1 个答案:

答案 0 :(得分:5)

这是我将如何做到的。这是顺序quickselect的一种并行版本。 (有些map / reduce工具可能不会让你轻松做事......)

选择输入集的一小块任意块。按顺序排序。我们将并行使用这些作为一大堆枢轴。调用此数组pivots,并将其大小设为k

执行map / reduce,如下所示:对于输入集中的每个值x,使用二进制搜索查找x相对于pivots的位置;称这个职位为bucket(x)。这是0k之间的整数。 reduce步骤是计算每个桶中的元素数量;将bucket[b]定义为x bucket(x) = b的数量。

中位数必须在“中位数桶”中。挑出该中位数桶中的所有值,并使用传统的顺序选择算法来查找具有正确索引的元素。