Сохранение промежуточных результатов
Как вы видели в главе 1, копирование данных между R и Spark — принципиально медленная операция. Это означает, что собирать данные с помощью collect(), как в предыдущем упражнении, стоит только тогда, когда это действительно необходимо.
Оператор пайпа очень удобен для последовательного объединения команд обработки данных, однако провести весь анализ в одной цепочке не получится. Например, следующий подход крайне нежелателен: отлаживать такой код будет практически невозможно.
final_results <- starting_data %>%
# 743 steps piped together
# ... %>%
collect()
Возникает дилемма: нужно сохранять результаты промежуточных вычислений, но использовать collect() не хочется из-за низкой скорости. Решение — использовать compute(): эта функция выполняет вычисления, но сохраняет результаты во временном датафрейме прямо в Spark. compute() принимает два аргумента: тиббл и имя переменной для датафрейма Spark, в котором будут храниться результаты.
a_tibble %>%
# some calculations %>%
compute("intermediate_results")
Это упражнение является частью курса
Введение в Spark с sparklyr на R
Инструкции к упражнению
Соединение со Spark уже создано для вас как spark_conn. Тиббл, привязанный к метаданным треков в Spark, предварительно определён как track_metadata_tbl.
- Отфильтруйте строки
track_metadata_tbl, в которыхartist_familiarityбольше 0,8. - Вычислите результаты с помощью
compute().- Сохраните результаты в датафрейме Spark с именем
"familiar_artists". - Присвойте результат R-тибблу с именем
computed.
- Сохраните результаты в датафрейме Spark с именем
- Просмотрите доступные наборы данных Spark с помощью
src_tbls(). - Выведите
class()объектаcomputed. Обратите внимание: в отличие отcollect(), функцияcompute()возвращает удалённый тиббл — данные по-прежнему хранятся в кластере Spark.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
computed <- track_metadata_tbl %>%
# Filter where artist familiarity is greater than 0.8
___ %>%
# Compute the results
___
# See the available datasets
___
# Examine the class of the computed results
___