Aan de slagBegin gratis

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

Bekijk cursus

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 van track_metadata_tbl te ordenen op year, daarna artist_name, daarna release, en daarna title.
    • Haal het resultaat op.
    • Doe hetzelfde nog eens, maar gebruik deze keer sdf_sort() in plaats van arrange(). Vergeet niet de kolomnamen tussen quotes te zetten.

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
)
Code bewerken en uitvoeren