Ich habe Probleme beim Abfragen einer Tabelle von> 5 Millionen Datensätze aus meiner MS SQL Server-Datenbank. Ich möchte in der Lage sein, alle Datensätze auszuwählen, aber mein Code scheint zu versagen, wenn ich zu viele Daten in den Speicher auswähle.Wie erstelle ich einen großen Pandas-Datenrahmen aus einer SQL-Abfrage, ohne den Arbeitsspeicher zu verlieren?
Dies funktioniert:
import pandas.io.sql as psql
sql = "SELECT TOP 1000000 * FROM MyTable"
data = psql.read_frame(sql, cnxn)
... aber das funktioniert nicht:
sql = "SELECT TOP 2000000 * FROM MyTable"
data = psql.read_frame(sql, cnxn)
Es diesen Fehler zurückgibt:
File "inference.pyx", line 931, in pandas.lib.to_object_array_tuples
(pandas\lib.c:42733) Memory Error
ich here gelesen, dass ein ähnliches Problem existiert beim Erstellen eines Datenrahmens aus einer CSV-Datei, und die Umgehung ist die Verwendung der "Iterator" und "Chunksi" ze 'Parameter wie folgt:
read_csv('exp4326.csv', iterator=True, chunksize=1000)
Gibt es eine ähnliche Lösung für die Abfrage von einer SQL-Datenbank? Wenn nicht, was ist die bevorzugte Lösung? Muss ich die Datensätze in Chunks auf andere Weise einlesen? Ich lese ein wenig Diskussion here für die Arbeit mit großen Datasets in Pandas, aber es scheint wie viel Arbeit, eine SELECT * -Abfrage auszuführen. Sicherlich gibt es einen einfacheren Ansatz.
Wie viel Speicher haben Sie haben? –
@PhillipCloud meine Maschine hat 4 GB RAM. – slizb
Abhängig vom 'dtype' Ihrer Spalten und der Anzahl der Spalten können Sie problemlos 4GB erreichen. ZB –