Python Psycopg-从PostgreSQL选择大型数据集时出现内存错误
因此,我有一个表,其中有146列,大约800万行稀疏数据存储在本地的Postgresql中 我的目标是一次选择整个数据集,将其存储到数据框中并执行一些计算 到目前为止,我已经在许多线程中读到了关于服务器端游标的内容,但我想我做错了什么,因为我没有看到内存的改进。文件也相当有限 到目前为止,我的代码如下:Python Psycopg-从PostgreSQL选择大型数据集时出现内存错误,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,因此,我有一个表,其中有146列,大约800万行稀疏数据存储在本地的Postgresql中 我的目标是一次选择整个数据集,将其存储到数据框中并执行一些计算 到目前为止,我已经在许多线程中读到了关于服务器端游标的内容,但我想我做错了什么,因为我没有看到内存的改进。文件也相当有限 到目前为止,我的代码如下: cur=conn.cursor('testCursor') cur.itersize = 100000 cur.execute("select * from events") df = cur
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的可用RAM8 mil rows x 146 columns,假设一个列存储至少一个字节,则至少会提供1GB。考虑到您的列可能每列存储超过一个字节,即使您尝试执行的第一步成功,您也会遇到RAM限制,例如,最终结果不适合RAM
处理大型数据集的通常策略是以小批量处理它们,然后在需要时合并结果。以PySpark为例。是的,数据约为3.5 gb。假设我想多次使用fetch将数据处理成小批量,那么如何滚动结果呢?解决问题的一种方法是将整个日期表复制到一个列数据库(如MonetDB)中,并使用python执行分析,包括查询中的代码。MonetDB允许您将python代码嵌入查询中。这是一个内置功能。这里有一个示例ref:。希望这对你有用。当然,谢谢!如果你找不到任何解决办法,我会试试