存储中间结果
正如您在第 1 章中所看到的,在 R 与 Spark 之间拷贝数据本质上非常慢。这意味着像上一练习那样收集数据只能在确有必要时执行。
管道运算符非常适合把数据处理命令串联起来,但通常情况下,您不可能把整套分析完全写成一个长链。比如下面的做法就很糟糕,因为您几乎无法调试代码。
final_results <- starting_data %>%
# 743 步连续管道
# ... %>%
collect()
这带来一个两难:您需要存储中间计算结果,但又不想 collect(),因为它很慢。解决方案是使用 compute() 来执行计算,但把结果存成 Spark 上的临时数据帧。compute() 接受两个参数:一个 tibble,以及用于在 Spark 中存放结果的数据帧名称。
a_tibble %>%
# 一些计算 %>%
compute("intermediate_results")
本练习是课程的一部分
R 中使用 sparklyr 的 Spark 入门
练习说明
已为您创建名为 spark_conn 的 Spark 连接。指向存储于 Spark 的曲目元数据的 tibble 已预定义为 track_metadata_tbl。
- 过滤
track_metadata_tbl中artist_familiarity大于 0.8 的行。 - 使用
compute()计算结果。- 将结果存为名为
"familiar_artists"的 Spark 数据帧。 - 将返回值赋给 R tibble,命名为
computed。
- 将结果存为名为
- 使用
src_tbls()查看可用的 Spark 数据集。 - 打印
computed的class()。注意:与collect()不同,compute()返回的是远程 tibble,数据仍存放在 Spark 集群中。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# track_metadata_tbl has been pre-defined
track_metadata_tbl
computed <- track_metadata_tbl %>%
# Filter where artist familiarity is greater than 0.8
___ %>%
# Compute the results
___
# See the available datasets
___
# Examine the class of the computed results
___