Ordenar vs. organizar
Hasta ahora, en este capítulo has explorado algunas funciones de transformación de características de MLlib de Spark. sparklyr también da acceso a funciones que usan la API de DataFrame de Spark.
La forma de dplyr para ordenar un tibble es usar arrange(). También puedes ordenar tibbles con la API de DataFrame de Spark mediante sdf_sort(). Esta función recibe un vector de caracteres con las columnas por las que ordenar y, por ahora, solo admite orden ascendente.
Por ejemplo, para ordenar por la columna x, y en caso de empates por la columna y, y luego por la columna z, el siguiente código compara los enfoques de dplyr y de DataFrame de Spark.
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
Para ver qué método es más rápido, prueba tanto arrange() como sdf_sort(). Puedes medir cuánto tarda tu código en ejecutarse envolviéndolo en microbenchmark(), del paquete con el mismo nombre.
microbenchmark({
# your code
})
Puedes aprender más sobre cómo perfilar la velocidad de tu código en el curso Writing Efficient R Code.
Este ejercicio forma parte del curso
Introducción a Spark con sparklyr en R
Instrucciones del ejercicio
Ya tienes una conexión a Spark creada como spark_conn. Se ha predefinido un tibble asociado a los metadatos de pistas almacenados en Spark como track_metadata_tbl.
- Usa
microbenchmark()para comparar cuánto tarda en realizarse lo siguiente.- Usa
arrange()para ordenar las filas detrack_metadata_tblporyear, luegoartist_name, despuésreleasey por últimotitle. - Recopila el resultado.
- Repite lo mismo, esta vez usando
sdf_sort()en lugar dearrange(). Recuerda entrecomillar los nombres de las columnas.
- Usa
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# 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
)