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
Ö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 itrack_metadata_tblefteryear, sedanartist_name, sedanreleaseoch slutligentitle. - Hämta resultatet med
collect(). - Gör samma sak igen, men använd den här gången
sdf_sort()i stället förarrange(). Kom ihåg att sätta kolumnnamnen inom citattecken.
- Använd
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
)