【发布时间】:2017-05-12 14:46:52
【问题描述】:
所以我有一个有 146 列的表格,大约有 146 列。 8 百万行稀疏数据本地存储到 Postgresql 中。
我的目标是一次选择整个数据集,将其存储到 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
【问题讨论】:
-
解决问题的一种方法可能是将整个日期表复制到列式数据库(例如 MonetDB)中,并在 python 中执行分析,包括查询中的代码。 MonetDB 允许您将 python 代码嵌入到查询中。这是一个内置功能。这是一个示例参考:monetdb.org/blog/voter-classification-using-monetdbpython。希望这对您有用。
-
好的,谢谢!如果没有找到 Postgres 的任何解决方案,我会试一试
标签: python postgresql psycopg2