Sortieren vs. Anordnen
Bisher in diesem Kapitel hast du einige Feature-Transformationen aus Sparks MLlib kennengelernt. sparklyr bietet außerdem Zugriff auf Funktionen, die die Spark-DataFrame-API nutzen.
Die dplyr-Methode zum Sortieren eines Tibbles ist arrange(). Du kannst Tibbles auch mit Sparks DataFrame-API über sdf_sort() sortieren. Diese Funktion nimmt einen Character-Vektor der zu sortierenden Spalten entgegen, und aktuell wird nur aufsteigende Sortierung unterstützt.
Um zum Beispiel nach der Spalte x und bei Gleichständen nach y und danach z zu sortieren, vergleicht der folgende Code die dplyr- und die Spark-DataFrame-Variante.
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
Um zu sehen, welche Methode schneller ist, probiere sowohl arrange() als auch sdf_sort() aus. Du kannst messen, wie lange dein Code läuft, indem du ihn in microbenchmark() aus dem gleichnamigen Paket einbettest.
microbenchmark({
# your code
})
Mehr über das Profiling der Ausführungsgeschwindigkeit erfährst du im Kurs Writing Efficient R Code.
Diese Übung ist Teil des Kurses
Einführung in Spark mit sparklyr in R
Anleitung zur Übung
Für dich wurde eine Spark-Verbindung als spark_conn erstellt. Ein an die in Spark gespeicherten Track-Metadaten angebundenes Tibble wurde als track_metadata_tbl vordefiniert.
- Verwende
microbenchmark(), um zu vergleichen, wie lange die folgenden Aktionen dauern.- Verwende
arrange(), um die Zeilen vontrack_metadata_tblnachyear, dannartist_name, dannrelease, danntitlezu sortieren. - Sammle das Ergebnis mit
collect()ein. - Mach dasselbe noch einmal, diesmal mit
sdf_sort()stattarrange(). Denk daran, die Spaltennamen zu quoten.
- Verwende
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
# Compare timings of arrange() and sdf_sort()
microbenchmark(
arranged = track_metadata_tbl %>%
# Arrange by year, then artist_name, then release, then title
___ %>%
# Collect the result
___,
sorted = track_metadata_tbl %>%
# Sort by year, then artist_name, then release, then title
___ %>%
# Collect the result
___,
times = 5
)