Сортировка: sdf_sort vs. arrange
В этой главе вы уже познакомились с несколькими функциями преобразования признаков из Spark MLlib. Помимо этого, sparklyr предоставляет доступ к функциям, которые используют Spark DataFrame API.
В dplyr для сортировки тиббла применяется функция arrange(). Тот же результат можно получить через Spark DataFrame API с помощью sdf_sort(). Эта функция принимает символьный вектор столбцов для сортировки и на данный момент поддерживает только сортировку по возрастанию.
Например, чтобы отсортировать данные сначала по столбцу x, затем (при совпадении значений) по y, а потом по z, можно сравнить оба подхода — через dplyr и через Spark DataFrame API:
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
Чтобы узнать, какой метод работает быстрее, попробуйте оба — arrange() и sdf_sort(). Время выполнения кода можно измерить, обернув его в microbenchmark() из одноимённого пакета.
microbenchmark({
# ваш код
})
Подробнее о профилировании скорости кода вы узнаете в курсе Writing Efficient R Code.
Это упражнение является частью курса
Введение в Spark с sparklyr на R
Инструкции к упражнению
Подключение к Spark уже создано и доступно как spark_conn. Тиббл, привязанный к метаданным треков в Spark, предопределён как track_metadata_tbl.
- Используйте
microbenchmark(), чтобы сравнить время выполнения следующих действий.- Примените
arrange(), чтобы упорядочить строкиtrack_metadata_tblсначала поyear, затем поartist_name, затем поrelease, затем поtitle. - Соберите результат с помощью
collect(). - Повторите то же самое, но на этот раз вместо
arrange()используйтеsdf_sort(). Не забудьте взять имена столбцов в кавычки.
- Примените
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# 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
)