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
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 Ergebnisfilenameszu.- Das erste Argument ist das Verzeichnis, dessen Dateien du auflistest:
parquet_dir. - Um absolute (statt relative) Pfade zu erhalten, gib zusätzlich
full.names = TRUEan.
- Das erste Argument ist das Verzeichnis, dessen Dateien du auflistest:
- Erstelle einen
data_framemit zwei Spalten.filenamesoll die gerade ermittelten Dateinamen ohne Verzeichnisteil enthalten. Erzeuge diese, indem du die Dateinamen anbasename()übergibst.size_bytessoll die Dateigrößen dieser Dateien enthalten. Erzeuge diese, indem du die Dateinamen anfile.size()übergibst.
- Verwende
spark_read_parquet(), um die Timbre-Daten in Spark zu importieren, und weise das Ergebnistimbre_tblzu.- 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 <- ___