Kom igångKom igång gratis

Sortering med sdf_sort och arrange

Hittills i det här kapitlet har du utforskat några funktioner för särdragstransformering från Sparks MLlib. sparklyr ger också tillgång till funktioner som använder Spark DataFrame API.

I dplyr sorterar man en tibble med arrange(). Det går även att sortera tibbles via Sparks DataFrame API med hjälp av sdf_sort(). Den funktionen tar en teckenvektorvektor med kolumnnamn att sortera på, och för närvarande stöds enbart sortering i stigande ordning.

För att till exempel sortera efter kolumn x, sedan (vid lika värden) efter kolumn y, och därefter efter kolumn z, jämför följande kod dplyr- och Spark DataFrame-metoderna.

a_tibble %>%
  arrange(x, y, z)
a_tibble %>%
  sdf_sort(c("x", "y", "z"))

För att se vilken metod som är snabbast kan du testa både arrange() och sdf_sort(). Du kan mäta hur lång tid din kod tar att köra genom att omsluta den i microbenchmark(), från paketet med samma namn.

microbenchmark({
  # din kod
})

Du kan lära dig mer om att profilera kodens hastighet i kursen Writing Efficient R Code.

Den här övningen är en del av kursen

Introduktion till Spark med sparklyr i R

Visa kurs

Övningsinstruktioner

En Spark-anslutning har skapats åt dig som spark_conn. En tibble kopplad till spårmetadata lagrad i Spark har fördefinierat som track_metadata_tbl.

  • Använd microbenchmark() för att jämföra hur lång tid det tar att utföra följande åtgärder.
    • Använd arrange() för att sortera raderna i track_metadata_tbl efter year, sedan artist_name, sedan release och slutligen title.
    • Hämta resultatet med collect().
    • Gör samma sak igen, men använd den här gången sdf_sort() i stället för arrange(). Kom ihåg att sätta kolumnnamnen inom citattecken.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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
)
Redigera och kör kod