我有一对3000多个键值的字符串和来自mapreduce programs reducer部分的长数据类型。。说{“aman”:2.121212,“bob”:0.3434}。如何根据mapreduce中的值获取前10个和后10个条目?
前10名
{100,岩石}2.{99.98765,巴尔博亚}。
倒数第10名
{0.00976,塔迪斯}2.{0.555,塔奇夫}。
等
我的一个解决方案是让它们Map{1:“aman | 2.1222”},{1:“bob | 0.343434”}……等等,然后在reduce中减少相串分裂值。使用树形图和列表存储所有值。发出树Map前10个,调用降序Map接口,发出后10个。
这太没效率了!。我只使用javaapi来获取top和botton的10个键值对
我要用MapReduce有效地实现这个!
1条答案
按热度按时间gtlvzcf81#
这是一个相当简单的问题。只需从每个map任务中发出前10名和后10名,然后在单个reducer中,只需从所有记录中找到最终的前10名和后10名。在这种情况下,您不会在单个reducer中获得太多记录,因为每个map任务只发送20条记录。注意一件事:从Map器发出一个标志,每个记录说它是前10名或后10名的数据。
如果需要进一步的帮助,请告诉我。