Trier avec arrange() vs. sdf_sort()
Jusqu’ici dans ce chapitre, vous avez exploré des fonctions de transformation de variables issues de MLlib de Spark. sparklyr donne aussi accès à des fonctions qui s’appuient sur l’API Spark DataFrame.
Avec dplyr, on trie un tibble avec arrange(). Vous pouvez aussi trier des tibbles via l’API Spark DataFrame avec sdf_sort(). Cette fonction prend un vecteur de caractères listant les colonnes sur lesquelles trier, et ne prend actuellement en charge que l’ordre croissant.
Par exemple, pour trier par la colonne x, puis (en cas d’égalité) par y, puis par z, le code suivant compare l’approche dplyr et celle de l’API Spark DataFrame.
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
Pour voir quelle méthode est la plus rapide, essayez à la fois arrange() et sdf_sort(). Vous pouvez mesurer la durée d’exécution en enveloppant votre code dans microbenchmark(), du package du même nom.
microbenchmark({
# your code
})
Pour en savoir plus sur le profilage des performances de votre code, consultez le cours Writing Efficient R Code.
Cet exercice fait partie du cours
Introduction à Spark avec sparklyr en R
Instructions
Une connexion Spark a été créée pour vous sous le nom spark_conn. Un tibble lié aux métadonnées des morceaux stockées dans Spark a été pré‑défini sous le nom track_metadata_tbl.
- Utilisez
microbenchmark()pour comparer le temps nécessaire à l’exécution des actions suivantes.- Utilisez
arrange()pour ordonner les lignes detrack_metadata_tblparyear, puisartist_name, puisrelease, puistitle. - Récupérez le résultat en local.
- Reproduisez la même chose en utilisant cette fois
sdf_sort()au lieu dearrange(). N’oubliez pas de mettre les noms de colonnes entre guillemets.
- Utilisez
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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
)