消化了一个月的Reddit评论

时间:2017-10-08 02:38:58

标签: python json postgresql

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

我想把它们放到我当地的win7机器上的postgres安装中。

我天真的做法是使用psycopg2.extras.DictCursor。我构建了一个从文件中加载每个json对象创建的大量dicts列表。然后执行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方面进行一些优化以使这个数据库易于管理?

1 个答案:

答案 0 :(得分:0)

有一个很棒的引擎叫做spark(它也有一个python api,pyspark),它通常可以处理太大而无法容纳在内存中的数据集,并且可以加载json对象。在win7上安装它有点痛苦,但它看起来像是[postgres包(Using pyspark to connect to PostgreSQL),你可以下载并与spark结合使用来做你所做的事情。问。它目前在许多行业中非常普遍使用,因为它具有多么容易扩展的特点。