Ordenar vs. arranjar
Até aqui neste capítulo, você explorou algumas funções de transformação de features da MLlib do Spark. O sparklyr também oferece acesso a funções que usam a API de DataFrame do Spark.
A forma do dplyr de ordenar uma tibble é usar arrange(). Você também pode ordenar tibbles usando a API de DataFrame do Spark com sdf_sort(). Essa função recebe um vetor de caracteres com as colunas para ordenar e, no momento, apenas a ordenação crescente é suportada.
Por exemplo, para ordenar pela coluna x, depois (em caso de empates) pela coluna y, e depois pela coluna z, o código a seguir compara as abordagens do dplyr e do DataFrame do Spark.
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
Para ver qual método é mais rápido, experimente usar tanto arrange() quanto sdf_sort(). Você pode medir quanto tempo seu código leva para rodar envolvendo-o em microbenchmark(), do pacote de mesmo nome.
microbenchmark({
# seu código
})
Você pode aprender mais sobre como analisar o desempenho do seu código no curso Writing Efficient R Code.
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. Uma tibble vinculada aos metadados de faixas armazenados no Spark já foi pré-definida como track_metadata_tbl.
- Use
microbenchmark()para comparar quanto tempo leva para realizar as ações a seguir.- Use
arrange()para ordenar as linhas detrack_metadata_tblporyear, depoisartist_name, depoisreleasee depoistitle. - Colete o resultado.
- Faça a mesma coisa novamente, desta vez usando
sdf_sort()em vez dearrange(). Lembre-se de colocar os nomes das colunas entre aspas.
- Use
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
# 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
)