【问题标题】:Working with large *.bz2 (Wikipedia dump)使用大型 *.bz2(维基百科转储)
【发布时间】:2016-08-18 08:17:36
【问题描述】:

我需要获取 2012 年 6 月 6 日至 2016 年 6 月关于“美元”和“欧元”的英文维基百科文章的每日页面浏览量。

原始转储 (*.bz2) 位于: https://dumps.wikimedia.org/other/pagecounts-ez/merged/

例如, https://dumps.wikimedia.org/other/pagecounts-ez/merged/pagecounts-2014-01-views-ge-5-totals.bz2 提供 2014 年 1 月的每小时/每日数据。

问题: 解压后的文件太大,无法在任何文本编辑器中打开。

所需的解决方案: 一个 Python 脚本 (?),它读取每个 .bz2 文件,仅搜索 en wikipedia "Dollar" / "Euro" 条目并将每日网页浏览量放入数据框中。

提示:使用 Pageviews API (https://wikitech.wikimedia.org/wiki/Pageviews_API) 不会有帮助,因为我需要在 2015 年之前获得一致的数据。stats.grok 数据 (http://stats.grok.se/) 也不是一个选项,因为生成的数据不同且不兼容。

【问题讨论】:

  • FWIW,vim 可以毫无问题地处理任意大的文件。
  • 不需要这些,您只需bzgrep 文件,因为每一行大约是一页。仅当您要处理数据时才需要脚本,例如总结重定向的综合浏览量。

标签: wikipedia wikipedia-api bzip2


【解决方案1】:

可能最简单的解决方案是编写搜索脚本以逐行读取标准输入(Python 中的sys.stdin当然还有a Stack Overflow question about that),然后通过管道输出bzcat给它:

$ bzcat pagecounts-2014-01-views-ge-5-totals.bz2 | python my_search.py

只需确保您的 Python 代码确实以增量方式处理输入,而不是尝试一次将整个输入缓冲到内存中。

这样,无需使用任何 bzip2 特定代码使 Python 脚本本身复杂化。

(这也可能比尝试在 Python 中进行 bzip2 解码更快,因为 bzcat 进程可以与搜索脚本并行运行。)

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多