排序(sdf_sort)與安排(arrange)比較
在本章截至目前為止,你已經探索了 Spark 的 MLlib 中的一些特徵轉換函式。sparklyr 也提供能使用 Spark DataFrame API 的一些函式。
使用 dplyr 排序 tibble 的方式是呼叫[arrange()](https://www.rdocumentation.org/packages/dplyr/topics/arrange)。你也可以使用 Spark 的 DataFrame API 透過[sdf_sort()](https://www.rdocumentation.org/packages/sparklyr/topics/sdf_sort) 來排序 tibbles。這個函式會接收要排序的欄位名稱字串向量,且目前只支援遞增排序。
例如,若要先依欄位 x 排序,再在有同分時依 y,最後依 z,以下程式碼示範 dplyr 與 Spark DataFrame 的兩種作法。
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
想比較哪一種方法比較快,請同時嘗試[arrange()](https://www.rdocumentation.org/packages/dplyr/topics/arrange) 與[sdf_sort()](https://www.rdocumentation.org/packages/sparklyr/topics/sdf_sort)。你可以把程式碼包在同名套件提供的[microbenchmark()](https://www.rdocumentation.org/packages/microbenchmark/topics/microbenchmark) 中來量測執行時間。
microbenchmark({
# your code
})
想進一步了解如何檢測程式碼速度,請參考課程[Writing Efficient R Code](https://www.datacamp.com/courses/writing-efficient-r-code)。
本練習屬於課程
使用 R 的 sparklyr:Spark 入門
練習說明
我們已為你建立名為 spark_conn 的 Spark 連線。連結至 Spark 中曲目中繼資料的 tibble 已預先定義為 track_metadata_tbl。
- 使用[
microbenchmark()](https://www.rdocumentation.org/packages/microbenchmark/topics/microbenchmark) 比較執行下列動作所需的時間。- 使用[
arrange()](https://www.rdocumentation.org/packages/dplyr/topics/arrange) 將track_metadata_tbl依序以year、artist_name、release、title排列列的順序。 - 收集結果。
- 以[
sdf_sort()](https://www.rdocumentation.org/packages/sparklyr/topics/sdf_sort) 取代arrange()再做一次相同的事。記得欄位名稱要加引號。
- 使用[
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# 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
)