我正在编写一个mapReduce作业,它从一个距离点最远的巨大数据集中查找k个对象。
在我的映射器中,我只想报告该数据块的距离最小的k对象。这样,我为每个数据块都有k中间(键,值),其中键是距离,值是object_id。所以在我的reducer()中,我可以轻松地处理和总结k个最低值。
我想不出一种只报告k对象的中间键值对的方法,该对象与mapper类中一个数据块的点的距离最小?
我知道我可以返回该数据块中所有输入数据的中间键值对(distance,obj_id),然后在我的reducer类中减少它并得到相同的结果。但是k <&lt; (每个数据块中的数据数量)并且通过仅报告k个中间键值而不是全部,我可以显着减少数据传输/混洗量。
感谢任何帮助
感谢
答案 0 :(得分:2)
假设k很小(你可以在内存中容纳这个数量的对象),那么这应该很容易: