Sortowanie: `sdf_sort()` kontra `arrange()`
W tym rozdziale poznałeś już kilka funkcji transformacji cech z biblioteki MLlib Sparka. sparklyr daje też dostęp do funkcji korzystających bezpośrednio z API DataFrame Sparka.
W dplyr sortowanie tibble odbywa się za pomocą arrange(). Możesz też sortować tibble przez API DataFrame Sparka, używając sdf_sort(). Funkcja ta przyjmuje wektor nazw kolumn (jako ciągi znaków) i aktualnie obsługuje wyłącznie sortowanie rosnące.
Na przykład, aby posortować według kolumny x, a w przypadku remisów – według y, a następnie z, poniższy kod porównuje podejście dplyr z podejściem Spark DataFrame.
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
Aby sprawdzić, która metoda jest szybsza, wypróbuj obie: arrange() i sdf_sort(). Czas wykonania kodu możesz zmierzyć, owijając go w microbenchmark() z pakietu o tej samej nazwie.
microbenchmark({
# twój kod
})
Więcej o profilowaniu wydajności kodu dowiesz się z kursu Writing Efficient R Code.
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark z pakietem sparklyr w R
Instrukcje do ćwiczenia
Połączenie ze Sparkiem zostało już dla ciebie utworzone jako spark_conn. Tibble powiązany z metadanymi utworów przechowywanymi w Sparku jest wstępnie zdefiniowany jako track_metadata_tbl.
- Użyj
microbenchmark(), aby porównać czas wykonania poniższych operacji.- Użyj
arrange(), aby posortować wierszetrack_metadata_tblwedługyear, potemartist_name, następnierelease, a na końcutitle. - Zbierz wynik za pomocą
collect(). - Wykonaj to samo, ale tym razem użyj
sdf_sort()zamiastarrange(). Pamiętaj, aby nazwy kolumn podać w cudzysłowie.
- Użyj
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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
)