排序 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()按year、artist_name、release、title的顺序对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
)