Aan de slagBegin gratis

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

Bekijk cursus

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 aan filenames.
    • 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 = TRUE mee.
  • Maak een data_frame met twee kolommen.
    • filename moet de bestandsnamen bevatten die je zojuist hebt opgehaald, zonder het mappad. Maak dit door de bestandsnamen door te geven aan basename().
    • size_bytes moet de bestandsgroottes van die bestanden bevatten. Maak dit door de bestandsnamen door te geven aan file.size().
  • Gebruik spark_read_parquet() om de timbre-gegevens in Spark te importeren en ken het resultaat toe aan timbre_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 <- ___
Code bewerken en uitvoeren