Tecniche avanzate per elaborare e caricare i dati in modo efficiente

Immagine generata dall’intelligenza artificiale utilizzando Kandinsky

In questa storia vorrei parlare delle cose che mi piacciono dei Panda e che utilizzo spesso nelle applicazioni ETL che scrivo per elaborare i dati. Toccheremo l’analisi esplorativa dei dati, la pulizia dei dati e le trasformazioni dei frame di dati. Dimostrerò alcune delle mie tecniche preferite per ottimizzare l’utilizzo della memoria ed elaborare grandi quantità di dati in modo efficiente utilizzando questa libreria. Lavorare con set di dati relativamente piccoli in Panda è raramente un problema. Gestisce i dati nei frame di dati con facilità e fornisce un set di comandi molto conveniente per elaborarli. Quando si tratta di trasformazioni di dati su frame di dati molto più grandi (1 Gb e più), normalmente utilizzerei Spark e cluster di elaborazione distribuiti. Può gestire terabyte e petabyte di dati, ma probabilmente costerà anche un sacco di soldi per far funzionare tutto quell’hardware. Ecco perché Panda potrebbe essere una scelta migliore quando dobbiamo gestire set di dati di medie dimensioni in ambienti con risorse di memoria limitate.

Generatori di panda e Python

In una delle mie storie precedenti ho scritto su come elaborare i dati in modo efficiente utilizzando i generatori in Python (1).

È un semplice trucco per ottimizzare l’utilizzo della memoria. Immagina di avere un enorme set di dati da qualche parte nella memoria esterna. Può essere un database o semplicemente un semplice file CSV di grandi dimensioni. Immaginiamo di dover elaborare questo file da 2-3 TB e applicare alcune trasformazioni a ciascuna riga di dati in questo file. Supponiamo di avere un servizio che eseguirà questa attività e che abbia solo 32 Gb di memoria. Questo ci limiterà nel caricamento dei dati e non potremo caricare l’intero file in memoria per dividerlo riga per riga applicando il semplice Python split(‘\n’) operatore. La soluzione sarebbe elaborarlo riga per riga e yield ogni volta liberando la memoria per quella successiva. Questo può aiutarci a creare un flusso costante di dati ETL verso la destinazione finale della nostra pipeline di dati. Può essere qualsiasi cosa: un bucket di archiviazione nel cloud, un altro database, una soluzione di data warehouse (DWH), un argomento di streaming o altro…

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *