Werken met parquet-bestanden
CSV-bestanden zijn handig om de inhoud van rechthoekige gegevensobjecten (zoals R-data.frames en Spark-DataFrames) op schijf op te slaan. Het probleem is dat ze erg traag zijn om te lezen en te schrijven, waardoor ze ongeschikt zijn voor grote gegevenssets. Parquet-bestanden bieden een snellere, beter presterende optie. Naast gebruik voor Spark-gegevens kun je parquet-bestanden ook gebruiken met andere tools in het Hadoop-ecosysteem, zoals Shark, Impala, Hive en Pig.
Technisch gezien is de term parquet-bestand niet helemaal juist. Als je gegevens in parquet-indeling opslaat, krijg je eigenlijk een hele map vol bestanden. De gegevens worden verdeeld over meerdere .parquet-bestanden, zodat ze eenvoudig over meerdere machines kunnen worden opgeslagen, en er zijn ook metadata-bestanden die de inhoud van elke kolom beschrijven.
sparklyr kan parquet-bestanden importeren met spark_read_parquet(). Deze functie neemt een Spark-verbinding, een tekenreeks met de naam van de te maken Spark-DataFrame, en een pad naar de parquet-map. Let op: deze functie importeert de gegevens rechtstreeks in Spark, wat meestal sneller is dan de gegevens eerst in R importeren en ze daarna met copy_to() van R naar Spark kopiëren.
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
Deze oefening maakt deel uit van de cursus
Introductie tot Spark met sparklyr in R
Oefeninstructies
Er is een Spark-verbinding voor je aangemaakt als spark_conn. Een tekenreeks naar de parquet-map (op het bestandssysteem waar R draait) is aangemaakt als parquet_dir.
- Gebruik
dir()om de absolute bestandspaden van de bestanden in de parquet-map op te sommen en ken het resultaat toe aanfilenames.- Het eerste argument is de map waarvan je de bestanden opsomt,
parquet_dir. - Om de absolute (in plaats van relatieve) paden op te halen, geef je ook
full.names = TRUEmee.
- Het eerste argument is de map waarvan je de bestanden opsomt,
- Maak een
data_framemet twee kolommen.filenamemoet de bestandsnamen bevatten die je zojuist hebt opgehaald, zonder het mappad. Maak dit door de bestandsnamen door te geven aanbasename().size_bytesmoet de bestandsgroottes van die bestanden bevatten. Maak dit door de bestandsnamen door te geven aanfile.size().
- Gebruik
spark_read_parquet()om de timbre-gegevens in Spark te importeren en ken het resultaat toe aantimbre_tbl.- Het eerste argument is de Spark-verbinding.
- Het tweede argument is
"timbre". - Het derde argument is
parquet_dir.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# 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 <- ___