假设x
条记录的输入,n
具有所需的属性(例如,它们的值为正),并且所有x
都具有唯一的密钥。
我想要做的是,在MapReduce中使用仅限地图的作业,会准确发出这些k
条记录中的n
条。
例如,假设这是我的输入:
(a, 10)
(g, -3)
(c, -2)
(f, 4)
(s, 2)
我希望准确地发出2个具有正值的元素。在此示例中,x
为5,n
为3,k
为2.我知道x
(我认为不需要),k
和{ {1}}在工作开始之前。
问题是具有正值的记录可以由不同的映射器处理。
我所想到的是,在每个映射器中使用大小为n
的散列表,并使用键的散列将具有正值的元素放入此散列表中。然后,将发出哈希表的第一个n
位置中的元素。但是,如果两个记录属于同一个哈希桶,则无法使用。任何替代方案?
答案 0 :(得分:1)
有一种方法可以使用仅限地图的作业和一些顺序代码来执行此操作,但是在大多数情况下使用减速器更简单。
在一种更正式的语言中,你想要做一个过滤器(sql where)和一个select(sql限制)。过滤器可以并行化,除非您想要采用概率方法,否则选择无法进行。
这个想法如下:
3.
应该在您的文件系统中产生一堆元文件,您可以使用它们相应的地图输出来阅读。然后贪婪地阅读一个新的元文件,直到你到达k
。如果你在地图输出/元文件中有更多的记录,你可以修剪输出文件(或告诉接下来只需要从那个"溢出"文件中读取y
记录的任何内容