开始使用免费开始使用

双片连映

您在前两章看到的 dplyr 方法使用的是 Spark 的 SQL 接口。也就是说,它们会先把您的 R 代码转换成 SQL 代码,再交给 Spark 执行。对于基础的数据操作,这种方式非常好用;但当您需要更复杂的处理时就会遇到限制。例如,您可以计算一列的均值,但无法直接计算中位数。下面是您在第 1 章"汇总列"练习中完成的示例:

track_metadata_tbl %>%
  summarize(mean_duration = mean(duration)) #OK
track_metadata_tbl %>%
  summarize(median_duration = median(duration))

sparklyr 还提供了两种将在接下来的两章讨论的"原生"接口。所谓原生,是指它们直接调用 Java 或 Scala 代码以访问 Spark 库,而无需转换为 SQL。sparklyr 支持 Spark DataFrame 的 Application Programming Interface (API),对应的函数以 sdf_ 为前缀;同时也支持访问 Spark 的机器学习库 MLlib,其中"特征转换"函数以 ft_ 开头,"机器学习"函数以 ml_ 开头。

与在 R 中工作相比,有一个重要的理念差异:Spark 对变量类型的要求比 R 严格得多。大多数原生函数需要 DoubleType 作为输入,并返回 DoubleType 作为输出。DoubleType 相当于 R 的 numeric 向量类型。sparklyr 会负责把 numeric 转换为 DoubleType,但把 logicalinteger 数据转换为 numeric 再转换回来,则需要由用户(也就是您)来完成。

以下哪些说法是正确的?

  1. sparklyrdplyr 方法会把代码转换为 Scala 代码后再在 Spark 上运行。
  2. 将 R 代码转换为 SQL 代码会限制可支持的计算数量。
  3. 大多数 Spark MLlib 建模函数需要 DoubleType 输入并返回 DoubleType 输出。
  4. 大多数 Spark MLlib 建模函数需要 IntegerType 输入并返回 BooleanType 输出。

本练习是课程的一部分

R 中使用 sparklyr 的 Spark 入门

查看课程

动手互动练习

通过我们的互动练习之一,将理论转化为实践

开始练习