Also habe ich eine Tabelle mit 146 Spalten und ca. 8 Mil Reihen von spärlichen Daten lokal in einem Postgresql gespeichert.Psycopg - Speicherfehler bei der Auswahl eines großen Datensatzes aus PostgreSQL
Mein Ziel ist es, den gesamten Datensatz auf einmal, speichern Sie es in eine Pandas Datenrahmen und führen einige Berechnungen zu wählen.
Bisher habe ich über serverseitige Cursors in vielen Threads gelesen, aber ich denke, ich mache etwas falsch, da ich nicht Verbesserung der Speicher sehen. Die Dokumentation ist auch recht begrenzt ..
Mein Code so weit ist die folgende:
cur=conn.cursor('testCursor')
cur.itersize = 100000
cur.execute("select * from events")
df = cur.fetchall()
df = pd.DataFrame(df)
conn.commit()
conn.close()
Ich habe auch versucht fetchmany() oder fetchone() anstelle von fetchall(), aber ich weiß nicht, wie um die Ergebnisse zu scrollen. Ich glaube, ich so etwas für fetchone nutzen kann(), aber ich weiß nicht, wie fetchmany zu handhaben():
df = cur.fetchone()
while row:
row = cur.fetchone()
schließlich bei fetchone() und fetchmany() wie kann ich verketten die Ergebnisse in einen einzigen Datenrahmen, ohne all meinen Speicher zu verbrauchen? Just zu beachten, dass ich 16gb verfügbar RAM
Ein Ansatz auf Ihrem Problem könnte sein, Ihren ganzen Tag Tisch in einem säulen DB kopieren (zB. MonetDB) und die Analyse in Python ausführen. MonetDB erlaubt Ihnen, Python-Code in Abfragen einzubetten. Dies ist eine integrierte Funktion. Hier ein Beispiel ref: https://www.monetdb.org/blog/voter-classification-using-monetdbpython. Hoffe, das ist nützlich für Sie. –
Sicher, danke! Wenn Sie keine Lösung mit Postgres finden, werde ich es versuchen – lacrima