Inizia subitoInizia gratis

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

Visualizza corso

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 a filenames.
    • 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.
  • Crea un data_frame con due colonne.
    • filename deve contenere i nomi dei file appena recuperati, senza la parte di directory. Crealo passando i nomi dei file a basename().
    • size_bytes deve contenere le dimensioni di quei file. Crealo passando i nomi dei file a file.size().
  • Usa spark_read_parquet() per importare in Spark i dati di timbro, assegnando il risultato a timbre_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 <- ___
Modifica ed esegui il codice