Lavorare con i file Parquet
I file CSV sono ottimi per salvare su disco il contenuto di oggetti di dati rettangolari (come gli data.frame di R e i DataFrame di Spark). Il problema è che sono molto lenti da leggere e scrivere, diventando inutilizzabili con insiemi di dati di grandi dimensioni. I file Parquet offrono un'alternativa con prestazioni superiori. Oltre a essere usati con i dati di Spark, i file Parquet possono essere utilizzati anche con altri strumenti dell'ecosistema Hadoop, come Shark, Impala, Hive e Pig.
Tecnicamente, parlare di file Parquet è improprio. Quando salvi i dati in formato Parquet, in realtà ottieni un'intera directory di file. I dati sono suddivisi in più file .parquet, così da poter essere archiviati facilmente su più macchine, e ci sono anche alcuni file di metadati che descrivono il contenuto di ciascuna colonna.
sparklyr può importare file Parquet usando spark_read_parquet(). Questa funzione accetta una connessione Spark, una stringa che indica il nome del DataFrame di Spark da creare e un percorso alla directory Parquet. Nota che questa funzione importa i dati direttamente in Spark, il che in genere è più veloce che importarli prima in R e poi usare copy_to() per copiarli da R a Spark.
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
Questo esercizio fa parte del corso
Introduzione a Spark con sparklyr in R
Istruzioni dell'esercizio
È già stata creata per te una connessione Spark come spark_conn. È stata anche creata una stringa che punta alla directory Parquet (sul file system in cui gira R) come parquet_dir.
- Usa
dir()per elencare i percorsi file assoluti dei file nella directory Parquet, assegnando il risultato afilenames.- Il primo argomento deve essere la directory di cui stai elencando i file,
parquet_dir. - Per ottenere i percorsi file assoluti (anziché relativi), passa anche
full.names = TRUE.
- Il primo argomento deve essere la directory di cui stai elencando i file,
- Crea un
data_framecon due colonne.filenamedeve contenere i nomi dei file appena recuperati, senza la parte di directory. Crealo passando i nomi dei file abasename().size_bytesdeve contenere le dimensioni di quei file. Crealo passando i nomi dei file afile.size().
- Usa
spark_read_parquet()per importare in Spark i dati di timbro, assegnando il risultato atimbre_tbl.- Il primo argomento deve essere la connessione Spark.
- Il secondo argomento deve essere
"timbre". - Il terzo argomento deve essere
parquet_dir.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# parquet_dir has been pre-defined
parquet_dir
# List the files in the parquet dir
filenames <- ___
# Show the filenames and their sizes
data_frame(
filename = ___,
size_bytes = ___
)
# Import the data into Spark
timbre_tbl <- ___