Ho problemi a eseguire query su una tabella di> 5 milioni di record dal mio database MS SQL Server. Voglio essere in grado di selezionare tutti i record, ma il mio codice sembra fallire quando si selezionano molti dati in memoria.Come creare un grande dataframe panda da una query sql senza esaurire la memoria?
Questo funziona:
import pandas.io.sql as psql
sql = "SELECT TOP 1000000 * FROM MyTable"
data = psql.read_frame(sql, cnxn)
... ma questo non funziona:
sql = "SELECT TOP 2000000 * FROM MyTable"
data = psql.read_frame(sql, cnxn)
Esso restituisce questo errore:
File "inference.pyx", line 931, in pandas.lib.to_object_array_tuples
(pandas\lib.c:42733) Memory Error
Ho letto here che un problema simile esiste quando si crea un dataframe da un file csv, e che la soluzione è usare "iterator" e "chunksi" parametri ze' come questo:
read_csv('exp4326.csv', iterator=True, chunksize=1000)
C'è una soluzione simile per l'esecuzione di query da un database SQL? In caso contrario, qual è il work-around preferito? Devo leggere i record in blocchi con qualche altro metodo? Ho letto un po 'di discussione su here per lavorare con dataset di grandi dimensioni in panda, ma sembra che ci sia un sacco di lavoro per eseguire una query SELECT *. Sicuramente c'è un approccio più semplice.
Quanta memoria si fa avere? –
@PhillipCloud la mia macchina ha 4 GB di RAM. – slizb
A seconda del 'dtype' delle tue colonne e del numero di colonne puoi facilmente raggiungere 4 GB. Ad esempio, –