我正在尝试用hadoop构建维基百科联合编辑页面的图表。原始数据包含编辑列表,即每个编辑有一行,告诉谁编辑了什么:
# revisionId pageId userId
1 1 10
2 1 11
3 2 10
4 3 10
5 4 11
我想要提取一个图,其中每个节点都是一个页面,如果至少有一个编辑器编辑了两个页面(相同的编辑器),那么两个页面之间就有一个链接。对于上面的例子,输出将是:
# edges: pageId1,pageId2
1,2
1,3
1,4
2,3
我远不是地图/缩减方面的专家,但我认为这必须通过两项工作来完成:
我使用Hadoop实现了这个功能,它可以工作。问题是,第二个任务的映射阶段确实很慢(实际上,前30%还可以,但是它会慢很多)。我想出的原因是,由于一些用户已经编辑了许多页面,映射器必须生成大量这些对作为输出。因此Hadoop必须溢出到磁盘上,使整个过程变得非常缓慢。
因此,我的问题如下:
作为一个边节点,这在编辑的一个小示例中运行得很好。只有用GBs的数据才会变慢。
发布于 2013-02-26 10:09:31
显然,这是一个被称为combinations/cross-correlation/co-occurrences,的常见问题,有两种模式可以使用Map/Reduce、Pairs或Stripe来解决这个问题:
我在问题中提出的方法是对方法,它通常生成更多的数据。条纹方法从组合器中获益更多,并且在我的例子中给出了更好的结果。
https://stackoverflow.com/questions/14650069
复制相似问题