消化一个月的 Reddit 评论

Posted

技术标签:

【中文标题】消化一个月的 Reddit 评论【英文标题】:Digesting an month of Reddit Comments 【发布时间】:2017-10-08 02:38:58 【问题描述】:

我有两个大型 json 文件,分别代表一个月的 Reddit 评论 (37gb) 和 Reddit 提交 (16gb)

我想将它们拉到我本地 win7 机器上的 postgres 安装中。

我天真的方法是使用psycopg2.extras.DictCursor。我构建了从文件中加载每个 json 对象创建的大量字典。然后执行cur.executemany(insert_sql, json_dicts)

这行得通,但我不认为它可以扩展。 json_dicts 对象在执行之前将是巨大的。

我一直在考虑如何为此编写可扩展的脚本。

首先,我怀疑通读整个 json 文件是没问题的——它不会爆炸内存?

我将其处理为:

with open(fp[foo], encoding="utf-8") as f:

    for line in f:
        j_content = json.loads(line)

如果这是真的,那么我可以进行批量提交(比如每次累积 100k 个对象时提交)。如果我很好地将它包装在try 中,那么我应该能够看到我失败的任何一点,并在下次尝试处理时从该点重新启动。

我正在就如何消化这些东西寻求更好的建议 - 我没有处理这么大的文件的经验。

我想我也应该在 postgres 方面进行一些优化以使这个数据库易于管理?

【问题讨论】:

虽然你避免一次读取所有文件(如.read().readlines()list(f) 等)——你可以不用担心内存,除非行太大,它甚至可以不会自己处理 【参考方案1】:

有一个很棒的引擎叫做 spark(它也有一个 python api,pyspark),它通常可以处理太大而无法放入内存的数据集,并且可以加载 json 对象。在 win7 上安装有点痛苦,但看起来有一个 [postgres 包(Using pyspark to connect to PostgreSQL),您可以下载并与 spark 一起使用来完成您的要求。它目前在许多行业中非常流行,因为它易于扩展。

【讨论】:

以上是关于消化一个月的 Reddit 评论的主要内容,如果未能解决你的问题,请参考以下文章

从某个 subreddit 获取多个用户的所有评论 - Reddit Dataset

搜索包含列表 PSAW python 中任何单词的 reddit 评论

获取reddit数据[关闭]

Rails 的 Reddit 样式的嵌套/线程/缩进注释?

获取使用特定 subreddit 的用户的 Reddit 用户名

从 BigQuery reddit 语料库打印给定月份的新 Redditor 列表