首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Hadoop的维基百科页面协同编辑图形提取

基于Hadoop的维基百科页面协同编辑图形提取
EN

Stack Overflow用户
提问于 2013-02-01 15:54:25
回答 1查看 148关注 0票数 2

我正在尝试用hadoop构建维基百科联合编辑页面的图表。原始数据包含编辑列表,即每个编辑有一行,告诉谁编辑了什么:

代码语言:javascript
运行
复制
# revisionId pageId userId
1 1 10
2 1 11
3 2 10
4 3 10
5 4 11

我想要提取一个图,其中每个节点都是一个页面,如果至少有一个编辑器编辑了两个页面(相同的编辑器),那么两个页面之间就有一个链接。对于上面的例子,输出将是:

代码语言:javascript
运行
复制
# edges: pageId1,pageId2
1,2
1,3
1,4
2,3

我远不是地图/缩减方面的专家,但我认为这必须通过两项工作来完成:

  1. 第一个作业为每个用户提取编辑过的页面列表。userId pageId1,pageId2,10 1,2,3 11,4
  2. 第二个作业接受上面的输出,只生成每个用户编辑的所有页面(因此,这些页面是由同一个用户编辑的,因此将在图中链接)。额外的好处是,我们可以计算出每一页共同编辑的用户数量,得到每个edge.pageId1的权重,pageID2的权重1,2,1,3,4,1,3,1,1,3,1

我使用Hadoop实现了这个功能,它可以工作。问题是,第二个任务的映射阶段确实很慢(实际上,前30%还可以,但是它会慢很多)。我想出的原因是,由于一些用户已经编辑了许多页面,映射器必须生成大量这些对作为输出。因此Hadoop必须溢出到磁盘上,使整个过程变得非常缓慢。

因此,我的问题如下:

  1. 对你们中那些比我更有经验的人来说,我做错了吗?有更简单的方法提取这个图吗?
  2. 磁盘溢出是否是第二个作业的映射阶段非常慢的原因?我怎么才能避免这种情况?

作为一个边节点,这在编辑的一个小示例中运行得很好。只有用GBs的数据才会变慢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-26 10:09:31

显然,这是一个被称为combinations/cross-correlation/co-occurrences,的常见问题,有两种模式可以使用Map/Reduce、Pairs或Stripe来解决这个问题:

  • 地图缩减设计模式:-对与条
  • MapReduce模式、算法和用例 (互相关截面)
  • 双条条纹

我在问题中提出的方法是对方法,它通常生成更多的数据。条纹方法从组合器中获益更多,并且在我的例子中给出了更好的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14650069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档