mapreduce中n元素k的选择算法

jdgnovmf  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(362)

假设输入 x 记录, n 其中有一个期望的属性(例如,它们的值是正的)和所有 x 有唯一的钥匙。
我想做的是,使用mapreduce中的map-only作业,精确地发射 k 其中之一 n 记录。
例如,假设这是我的输入:

(a, 10)
(g, -3)
(c, -2)
(f, 4)
(s, 2)

我想发射两个正数的元素。在这个例子中 x 是5, n 是3和 k 是2。我知道 x (我认为这是不必要的), k 以及 n 在作业开始之前。问题是,具有正值的记录可以由不同的Map器处理。
我想到的是,使用一个大小相同的哈希表 n 在每个Map器中,使用键的哈希值将具有正值的元素放入此哈希表中。然后,第一个 k 哈希表的位置将被释放。但是,如果两个记录落在同一个散列桶中,这将不起作用。有别的选择吗?

thigvfpy

thigvfpy1#

有一种方法可以通过一个只Map的作业和一点顺序代码来实现,但是这是一种非常粗糙的方法,而且在大多数情况下,使用一个减缩器更简单。
在更正式的语言中,您需要执行一个过滤器(sqlwhere)和一个select(sqllimit)。过滤器可以并行化,而select不能,除非你想采用概率方法。
其思路如下:
在“仅Map”作业中,您可以根据选择标准筛选数据。
您还可以跟踪有关在Map器中过滤了多少条记录的元信息。
把这个数字写进共享文件系统中的一个文件,我猜是hdfs。以任务id或输出文件名加上一些后缀命名文件。 3. 应该在文件系统中生成一堆可以读取的元文件,以及相应的Map输出。然后贪婪地读一个新的元文件,直到你达到你的目标 k . 如果在一个Map输出/元文件中有更多的记录,可以删减输出文件(或者告诉下一个文件它只需要读取) y “溢出”文件中的记录)。

相关问题