Armazenando resultados intermediários
Como você viu no Capítulo 1, copiar dados entre R e Spark é uma tarefa fundamentalmente lenta. Isso significa que coletar os dados, como você viu no exercício anterior, só deve ser feito quando realmente precisar.
O operador pipe é ótimo para encadear comandos de manipulação de dados, mas, em geral, você não consegue fazer uma análise inteira com tudo encadeado. Por exemplo, isso é uma prática péssima, porque você nunca conseguirá depurar seu código.
final_results <- starting_data %>%
# 743 etapas encadeadas
# ... %>%
collect()
Isso gera um dilema. Você precisa armazenar os resultados de cálculos intermediários, mas não quer coletá-los porque é lento. A solução é usar compute() para realizar o cálculo, mas armazenar os resultados em um data frame temporário no Spark. A função compute recebe dois argumentos: um tibble e um nome de variável para o data frame do Spark que armazenará os resultados.
a_tibble %>%
# alguns cálculos %>%
compute("intermediate_results")
Este exercício faz parte do curso
Introdução ao Spark com sparklyr em R
Instruções do exercício
Uma conexão com o Spark já foi criada para você como spark_conn. Um tibble vinculado aos metadados de faixas armazenados no Spark foi predefinido como track_metadata_tbl.
- Filtre as linhas de
track_metadata_tblem queartist_familiarityé maior que 0.8. - Calcule os resultados usando
compute().- Armazene os resultados em um data frame do Spark chamado
"familiar_artists". - Atribua o resultado a um tibble R chamado
computed.
- Armazene os resultados em um data frame do Spark chamado
- Veja os conjuntos de dados do Spark disponíveis usando
src_tbls(). - Imprima a
class()decomputed. Perceba que, diferente decollect(),compute()retorna um tibble remoto. Os dados ainda estão armazenados no cluster Spark.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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
___