簡體   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