НачатьНачать бесплатно

Сортировка: 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
)
Редактировать и запускать код