开始使用免费开始使用

排序 vs. 安排

到目前为止,您已经探索了 Spark 的 MLlib 中的一些特征变换函数。sparklyr 还提供了对使用 Spark DataFrame API 的一些函数的访问。

dplyr 中对 tibble 排序,通常使用 arrange()。您也可以使用 Spark 的 DataFrame API 通过 sdf_sort() 来为 tibble 排序。该函数接收一个由列名组成的字符向量,目前仅支持升序排序。

例如,若要先按列 x 排序,然后在出现并列时按 y,再按 z,下面的代码对比了 dplyr 与 Spark DataFrame 的两种做法。

a_tibble %>%
  arrange(x, y, z)
a_tibble %>%
  sdf_sort(c("x", "y", "z"))

想要比较哪种方法更快,请同时尝试 arrange()sdf_sort()。您可以通过将代码包裹在同名包提供的 microbenchmark() 中来查看其运行耗时。

microbenchmark({
  # your code
})

关于如何分析代码运行速度,您可以在课程 Writing Efficient R Code 中学习更多内容。

本练习是课程的一部分

R 中使用 sparklyr 的 Spark 入门

查看课程

练习说明

我们已为您创建了名为 spark_conn 的 Spark 连接。存储在 Spark 中的曲目信息已作为 tibble 预定义为 track_metadata_tbl

  • 使用 microbenchmark() 比较以下操作所用时间:
    • 使用 arrange()yearartist_namereleasetitle 的顺序对 track_metadata_tbl 的行进行排序。
    • 收集结果。
    • 再做一次相同的事情,但这次用 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
)
编辑并运行代码