[英]Loading same file for each mapper
假设我们有10个数据点和5个映射器,目标是计算点之间的距离。 通常,通过将每两对进行比较将这花费O(N ^ 2)。
我要做的是将包含数据点的整个文件加载到每个映射器,并使每个映射器在不同的点上运行。 例如,让映射器#1计算点1和点2与所有其他点的距离,让映射器#2计算点3和点4与所有其他点的距离,依此类推。
我在论文中遇到了这种算法,但是它没有实现它的特定方法。 对于如何将整个文件加载到每个映射器,或如何使每个映射器通过文件在特定索引上进行操作的任何想法或建议,将不胜感激。
看一下本文 ,建议使用“块嵌套循环”联接(第3节),该联接与您要求的联接稍有不同,但可以轻松扩展以适应您的需求。 如果将R和S都视为一个来源,那么最后,它会根据需要将所有点与所有其他点进行比较。
根据您的要求,您无需实施仅保留前k个结果的第二个MapReduce作业。
在hadoop 1.2.0(旧API)中,您可以通过使用conf.get("mapred.map.tasks")
命令获得映射器的总数,并通过使用conf.get("mapred.map.tasks")
获得当前映射器的conf.get("mapred.task.partition")
命令。
但是,要回答有关如何为所有映射器获取相同文件的问题,可以使用Distributed Cache 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.