我有两个大的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方面进行一些优化以使这个数据库易于管理?
答案 0 :(得分:0)
有一个很棒的引擎叫做spark(它也有一个python api,pyspark),它通常可以处理太大而无法容纳在内存中的数据集,并且可以加载json对象。在win7上安装它有点痛苦,但它看起来像是[postgres包(Using pyspark to connect to PostgreSQL),你可以下载并与spark结合使用来做你所做的事情。问。它目前在许多行业中非常普遍使用,因为它具有多么容易扩展的特点。