Sorting vs. arranging
Finora in questo capitolo hai esplorato alcune funzioni di trasformazione delle feature di MLlib di Spark. sparklyr dà anche accesso ad alcune funzioni che utilizzano la Spark DataFrame API.
Il modo dplyr per ordinare una tibble è usare arrange(). Puoi anche ordinare le tibble usando la Spark DataFrame API con sdf_sort(). Questa funzione accetta un vettore di caratteri con le colonne su cui ordinare e, al momento, supporta solo l’ordinamento in ordine crescente.
Per esempio, per ordinare prima per la colonna x, poi (in caso di pari merito) per la colonna y, quindi per la colonna z, il codice seguente confronta l’approccio dplyr con quello della Spark DataFrame API.
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
Per capire quale metodo sia più veloce, prova sia arrange() sia sdf_sort(). Puoi misurare il tempo di esecuzione racchiudendo il codice in microbenchmark(), dell’omonimo pacchetto.
microbenchmark({
# your code
})
Puoi approfondire il profiling delle prestazioni del tuo codice nel corso Writing Efficient R Code.
Questo esercizio fa parte del corso
Introduzione a Spark con sparklyr in R
Istruzioni dell'esercizio
È già stata creata per te una connessione Spark come spark_conn. Una tibble collegata ai metadati dei brani archiviati in Spark è stata predefinita come track_metadata_tbl.
- Usa
microbenchmark()per confrontare quanto tempo impiega l’esecuzione delle seguenti azioni.- Usa
arrange()per ordinare le righe ditrack_metadata_tblperyear, poiartist_name, poirelease, poititle. - Raccogli il risultato.
- Ripeti la stessa cosa usando questa volta
sdf_sort()invece diarrange(). Ricordati di mettere tra virgolette i nomi delle colonne.
- Usa
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# 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
)