维基百科页面计数数据集的Hadoop



我想构建一个Hadoop作业,它基本上以维基百科页面计数统计数据为输入,并创建一个类似的列表

en-Articlename: en:count de:count fr:count

为此,我需要与每种语言相关的不同的文章名称,即Bruges(en,fr)、Brügge(de),MediaWikiApi查询文章(http://en.wikipedia.org/w/api.php?action=query&title=布鲁日&prop=langlinks&lllimit=500)。

我的问题是找到解决这个问题的正确方法。

我的大致方法是:

  • 逐行处理页面计数文件(行示例"de Brugge 2 48824")
  • 查询MediaApi并写下类似"文章名称:进程语言键:计数"的内容
  • 将所有en Articlename值聚合到一行(可能在第二个作业中?)

现在查询每一行的MediaAPI似乎很不方便,但目前我还无法找到更好的解决方案。

你认为目前的方法可行吗?或者你能想出一个不同的方法吗?

附带说明:创建的作业链将用于在我的(小型)Hadoop集群上进行一些时间测量,因此更改任务仍然可以

编辑:这是我刚刚发现的一个非常相似的讨论。。

我认为在批量处理过程中查询MediaApi不是一个好主意,因为:

  • 网络延迟(您的处理速度将大大减慢)
  • 单点故障(如果api或您的互联网连接中断,您的计算将中止)
  • 外部依赖(很难重复计算并得到相同的结果)
  • 法律问题和禁令的可能性

问题的可能解决方案是下载整个维基百科转储。每篇文章都以预定义的格式包含指向其他语言文章的链接,因此您可以轻松地编写一个地图/减少作业,收集这些信息,并在英文文章名称和其他名称之间建立对应关系。

然后,您可以使用映射/减少作业处理页数统计中的对应关系。如果你这样做,你将独立于mediawiki的api,加快数据处理并改进调试。

最新更新