Arbeta med parquet-filer
CSV-filer är utmärkta för att spara innehållet i rektangulära dataobjekt (som R:s data.frames och Sparks DataFrames) till disk. Problemet är att de är långsamma att läsa och skriva, vilket gör dem opraktiska för stora datamängder. Parquet-filer erbjuder ett mer högpresterande alternativ. Förutom att användas för Spark-data kan parquet-filer även användas med andra verktyg i Hadoop-ekosystemet, som Shark, Impala, Hive och Pig.
Tekniskt sett är parquet-fil ett missvisande begrepp. När du lagrar data i parquet-format får du faktiskt en hel katalog med filer. Datan fördelas över flera .parquet-filer, vilket gör det enkelt att lagra den på flera maskiner, och det finns även vissa metadatafiler som beskriver innehållet i varje kolumn.
sparklyr kan importera parquet-filer med spark_read_parquet(). Den här funktionen tar en Spark-anslutning, en sträng som namnger den Spark DataFrame som ska skapas, samt en sökväg till parquet-katalogen. Observera att funktionen importerar datan direkt till Spark, vilket vanligtvis är snabbare än att först importera datan till R och sedan använda copy_to() för att kopiera datan från R till Spark.
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
Den här övningen är en del av kursen
Introduktion till Spark med sparklyr i R
Övningsinstruktioner
En Spark-anslutning har skapats åt dig som spark_conn. En sträng som pekar på parquet-katalogen (i det filsystem där R körs) har skapats åt dig som parquet_dir.
- Använd
dir()för att lista de absoluta filsökvägarna för filerna i parquet-katalogen och tilldela resultatet tillfilenames.- Det första argumentet ska vara den katalog vars filer du listar,
parquet_dir. - För att hämta de absoluta (snarare än relativa) filsökvägarna ska du även ange
full.names = TRUE.
- Det första argumentet ska vara den katalog vars filer du listar,
- Skapa en
data_framemed två kolumner.filenameska innehålla de filnamn du just hämtade, utan katalogdelen. Skapa den genom att skicka filnamnen tillbasename().size_bytesska innehålla filstorlekarna för dessa filer. Skapa den genom att skicka filnamnen tillfile.size().
- Använd
spark_read_parquet()för att importera timbre-datan till Spark och tilldela resultatet tilltimbre_tbl.- Det första argumentet ska vara Spark-anslutningen.
- Det andra argumentet ska vara
"timbre". - Det tredje argumentet ska vara
parquet_dir.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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 <- ___