所以我有一个表,有146列,大约。本地存储到Postgresql中的800万行稀疏数据。
我的目标是一次选择整个数据集,将其存储到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()的情况下,如何在不消耗所有内存的情况下将结果连接到单个数据帧中?仅需注意,我有16 to的可用RAM
发布于 2017-05-12 12:50:02
8mil行x 146列(假设一列至少存储一个字节)将提供至少1 GB。考虑到您的列可能每列存储超过一个字节,即使您尝试做的第一步会成功,您也会遇到RAM约束(例如,最终结果不适合RAM)。
处理大型数据集的常用策略是以小批量处理它们,然后(如果需要)合并结果。例如,让我们来看看PySpark。
https://stackoverflow.com/questions/43929325
复制相似问题