LoslegenKostenlos loslegen

Arbeiten mit Parquet-Dateien

CSV-Dateien eignen sich gut, um rechteckige Datenobjekte (wie R-data.frames und Spark-DataFrames) auf der Festplatte zu speichern. Das Problem: Das Ein- und Auslesen ist sehr langsam – für große Datensätze kaum nutzbar. Parquet-Dateien sind eine performantere Alternative. Neben Spark-Daten können Parquet-Dateien auch mit anderen Tools im Hadoop-Ökosystem verwendet werden, etwa Shark, Impala, Hive und Pig.

Genau genommen ist „Parquet-Datei“ ein Fehlbegriff. Wenn du Daten im Parquet-Format speicherst, erhältst du tatsächlich ein ganzes Verzeichnis voller Dateien. Die Daten werden über mehrere .parquet-Dateien verteilt, sodass sie leicht auf mehreren Maschinen abgelegt werden können. Zusätzlich gibt es Metadatendateien, die den Inhalt jeder Spalte beschreiben.

sparklyr kann Parquet-Dateien mit spark_read_parquet() importieren. Diese Funktion erwartet eine Spark-Verbindung, einen String mit dem Namen des zu erstellenden Spark-DataFrames und einen Pfad zum Parquet-Verzeichnis. Beachte, dass die Daten damit direkt in Spark importiert werden – meist schneller, als sie erst nach R zu laden und dann mit copy_to() von R nach Spark zu kopieren.

spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")

Diese Übung ist Teil des Kurses

Einführung in Spark mit sparklyr in R

Kurs anzeigen

Anleitung zur Übung

Eine Spark-Verbindung wurde bereits als spark_conn erstellt. Ein String, der auf das Parquet-Verzeichnis (im Dateisystem, auf dem R läuft) zeigt, steht dir als parquet_dir zur Verfügung.

  • Verwende dir(), um die absoluten Dateipfade der Dateien im Parquet-Verzeichnis aufzulisten, und weise das Ergebnis filenames zu.
    • Das erste Argument ist das Verzeichnis, dessen Dateien du auflistest: parquet_dir.
    • Um absolute (statt relative) Pfade zu erhalten, gib zusätzlich full.names = TRUE an.
  • Erstelle einen data_frame mit zwei Spalten.
    • filename soll die gerade ermittelten Dateinamen ohne Verzeichnisteil enthalten. Erzeuge diese, indem du die Dateinamen an basename() übergibst.
    • size_bytes soll die Dateigrößen dieser Dateien enthalten. Erzeuge diese, indem du die Dateinamen an file.size() übergibst.
  • Verwende spark_read_parquet(), um die Timbre-Daten in Spark zu importieren, und weise das Ergebnis timbre_tbl zu.
    • Das erste Argument ist die Spark-Verbindung.
    • Das zweite Argument ist "timbre".
    • Das dritte Argument ist parquet_dir.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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 bearbeiten und ausführen