我有一对3000+键值字符串和来自mapreduce程序reducer部分的长数据类型。。say{"Aman":2.121212,"Bob":0.343434}。如何根据mapreduce中的值获得前10个和后10个条目?
前10名
- {100,Rock}2.{99.98765,巴尔博亚}。。
底部10
- {0.00976,Tardis}2.{0.555,Taqif}。
etc
我的一个解决方案是让他们映射{1:"Aman|2.1222"},{1:"Bob |0.343434"}。。。。。等等,然后在减小相位串分割值中。使用树图和列表来存储所有值。发出树映射的前10个,并调用递减映射接口,发出最后10个。
这是非常低效的!。我使用Java API只是为了获得顶部和底部的十个键值对
我想有效地使用地图还原来实现这一点!
这是一个相当简单的问题。只需从每个映射任务中发出顶部10和底部10,然后在单个reducer中,只需从所有记录中找到最终的顶部/底部10。在这种情况下,您不会在单个reducer中获得太多记录,因为您只会从每个映射任务中发出20条记录。注意一件事:From映射器会为每条记录发出一个标志,表示它是前10名或后10名的数据。
如果需要进一步的帮助,请告诉我。