Sorteren vs. ordenen
Tot nu toe heb je in dit hoofdstuk een aantal feature-transformatiefuncties uit Spark's MLlib verkend. sparklyr geeft je ook toegang tot functies die gebruikmaken van de Spark DataFrame API.
De dplyr-manier om een tibble te sorteren is met arrange(). Je kunt tibbles ook sorteren via de Spark DataFrame API met sdf_sort(). Deze functie neemt een tekenreeksvector met kolommen om op te sorteren, en momenteel wordt alleen sorteren in oplopende volgorde ondersteund.
Als je bijvoorbeeld eerst op kolom x wilt sorteren, en (bij gelijke waarden) daarna op kolom y, en daarna op kolom z, vergelijkt de volgende code de dplyr- en Spark DataFrame-aanpak.
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
Om te zien welke methode sneller is, probeer zowel arrange() als sdf_sort(). Je kunt zien hoe lang je code erover doet door die te omhullen met microbenchmark() uit het pakket met dezelfde naam.
microbenchmark({
# your code
})
Je kunt meer leren over het profileren van de snelheid van je code in de cursus Writing Efficient R Code.
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 tibble gekoppeld aan de trackmetadata die in Spark is opgeslagen is vooraf gedefinieerd als track_metadata_tbl.
- Gebruik
microbenchmark()om te vergelijken hoe lang het duurt om het volgende uit te voeren.- Gebruik
arrange()om de rijen vantrack_metadata_tblte ordenen opyear, daarnaartist_name, daarnarelease, en daarnatitle. - Haal het resultaat op.
- Doe hetzelfde nog eens, maar gebruik deze keer
sdf_sort()in plaats vanarrange(). Vergeet niet de kolomnamen tussen quotes te zetten.
- Gebruik
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# 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
)