我想构建一个hadoop作业,它基本上以wikipedia的pagecount统计作为输入,并创建一个类似
en-Articlename: en:count de:count fr:count
为此,我需要与每种语言相关的不同的文章名,即布鲁日(en,fr),brügge(de),它支持mediawikiapi查询articlewise(http://en.wikipedia.org/w/api.php?action=query&titles=bruges&prop=langlinks&lllimit=500).
我的问题是找到解决这个问题的正确方法。
我的粗略做法是:
逐行处理pagecount文件(行示例'de brugge 2 48824')
查询mediaapi并编写类似“en-articlename:processlanguage”的东西-key:count'
将所有en articlename值聚合到一行(可能在第二个作业中?)
现在似乎很难查询每一行的mediaapi,但目前还不能找到更好的解决方案。
你认为目前的方法可行吗?或者你能想出一个不同的方法吗?
另一方面:创建的作业链将用于在我的(小型)hadoop集群上进行一些时间度量,因此更改任务仍然是可以的
编辑:这里有一个我刚刚发现的非常类似的讨论。。
1条答案
按热度按时间ru9i0ody1#
我认为在批处理过程中查询mediaapi不是一个好主意,因为:
网络延迟(您的处理速度将大大减慢)
单点故障(如果api或internet连接中断,您的计算将中止)
外部依赖(很难重复计算并得到相同的结果)
法律问题和禁止可能性
解决问题的可能方法是下载整个维基百科转储文件。每篇文章都包含以预定义格式用其他语言指向该文章的链接,因此您可以轻松地编写一个map/reduce作业来收集这些信息,并在英文文章名和其他文章名之间建立对应关系。
然后可以在map/reduce作业处理pagecount统计中使用对应关系。如果这样做,您将独立于mediawiki的api,加快数据处理并改进调试。