開始使用免費開始

排序(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 依序以 yearartist_namereleasetitle 排列列的順序。
    • 收集結果。
    • 以[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
)
編輯並執行程式碼