繁体   English   中英

Psycopg-从PostgreSQL选择大型数据集时出现内存错误

[英]Psycopg - Memory error when selecting a large dataset from PostgreSQL

所以我有一张146列左右的表格。 在本地存储到Postgresql中的8百万行稀疏数据。

我的目标是立即选择整个数据集,将其存储到pandas数据框中并执行一些计算。

到目前为止,我已经阅读了许多线程中的服务器端游标,但是我想我做错了什么,因为我看不到内存的改进。 该文档也非常有限。

到目前为止,我的代码如下:

cur=conn.cursor('testCursor')
cur.itersize = 100000
cur.execute("select * from events")

df = cur.fetchall()

df = pd.DataFrame(df)
conn.commit()
conn.close()

我也尝试使用fetchmany()或fetchone()而不是fetchall(),但我不知道如何滚动结果。 我想我可以对fetchone()使用类似的方法,但是我不知道如何处理fetchmany():

df = cur.fetchone()
while row:
   row = cur.fetchone() 

最后,在使用fetchone()和fetchmany()的情况下,如何在不占用我所有内存的情况下将结果合并到单个数据帧中? 请注意,我有16gb的可用RAM

800万行x 146列(假设一列存储至少一个字节)将为您提供至少1 GB。 考虑到您的列可能每列存储多于一个字节,即使您尝试执行的第一步成功了,也会遇到RAM约束(例如,最终结果将不适合RAM)。

处理大型数据集的通常策略是小批量处理它们,然后(如果需要)组合结果。 例如,看看PySpark。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM