Qual è il formato di dati da utilizzare per il tuo progetto Big Data?

Qual è il formato di dati ideale da utilizzare per il tuo progetto Big Data?

Pickle, Parquet, CSV, Feather, HDF5, ORC, JSON: quale dovresti usare e perché?

Immagine di Maarten van den Heuvel - Unsplash

Scegliere il formato di dati corretto è cruciale nei progetti di Data Science, poiché influisce su tutto, dalla velocità di lettura e scrittura dei dati al consumo di memoria e all’interoperabilità. Questo articolo esplora sette formati di serializzazione/deserializzazione popolari in Python, concentrandosi sulle loro implicazioni in termini di velocità e utilizzo della memoria.

Attraverso l’analisi, vedremo anche come utilizzare il profilo in Python (usando il modulo integrato cProfilo) e come ottenere statistiche sull’utilizzo della memoria per file specifici nel filesystem (usando il modulo Python os).

Ovviamente, ogni progetto ha le sue specificità, oltre alla semplice velocità e utilizzo della memoria. Ma tracceremo alcune tendenze che speriamo possano essere utili per capire quale formato scegliere per un determinato progetto.

Comprensione della Serializzazione e Deserializzazione

La serializzazione è il processo di salvataggio di un oggetto (in Python, ad esempio un DataFrame di pandas) in un formato che può essere salvato su un file per un successivo recupero. La deserializzazione è il processo inverso.

Un dataframe è un oggetto Python e non può essere persistito così com’è. Deve essere tradotto in un file per poter caricare questo oggetto in un momento successivo.

Quando si salva un dataframe, si “serializza” i dati. E quando li si ricarica, si “deserializza” o si traducono in un formato leggibile dal linguaggio (qui leggibile da Python).

Alcuni formati sono ampiamente utilizzati perché sono leggibili dall’uomo, come JSON o CSV. Questi due formati sono anche utilizzati perché sono agnostici al linguaggio. Proprio come protocol buffers, che sono stati originariamente sviluppati da Google. JSON e Protocol buffer sono anche popolari per le API e consentono l’invio di dati tra diversi servizi scritti in linguaggi diversi.

D’altra parte, alcuni formati, come il pickle di Python, sono specifici del linguaggio e non ideali per il trasferimento di dati tra servizi in diversi linguaggi di programmazione. Ad esempio, per un caso d’uso di machine learning, se un repository addestra un modello e lo serializza in pickle, questo file potrà essere letto solo da Python. Quindi, se l’API che…