[英]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.