1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. R 中使用 sparklyr 的 Spark 入门

Connected

Bài tập

高级选择 II:SQL

如前所述,当您使用 dplyr 接口时,sparklyr 会先将您的代码转换为 SQL,再传递给 Spark。大多数情况下,这正是您需要的。不过,您也可以直接编写原生 SQL 来完成相同的任务。多数时候这并不明智,因为代码更难编写,也更难调试。然而,如果您希望代码具有可移植性——也就是说,能在 R 之外复用——这可能会很有用。例如,一个常见流程是先用 sparklyr 试验数据处理,然后在生产环境切换为原生 SQL。若从一开始就写原生 SQL,迁移到生产时就能直接复制粘贴查询。

SQL 查询以字符串形式书写,并传递给 DBI 包中的 dbGetQuery()。基本模式如下所示。

query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)

请注意,与您之前编写的 dplyr 代码不同,dbGetQuery() 会立即执行查询并将结果返回到 R。若您希望延迟返回数据,可以使用 dbSendQuery() 执行查询,再用 dbFetch() 取回结果。那属于更高级的用法,此处不展开。另外需要注意,DBI 函数返回的是 data.frame,而不是 tibble,因为 DBI 是一个更底层的包。

如果您想进一步学习如何编写 SQL 代码,建议学习 Introduction to SQL 课程。

Hướng dẫn

100 XP

系统已为您创建 Spark 连接 spark_conn。一个附着在 Spark 中曲目元数据上的 tibble 已预定义为 track_metadata_tbl,并可在 SQL 查询中通过 track_metadata 访问。

  • 完成查询:从 track_metadata Spark 数据框中选择所有列,条件为 year 小于 1935 且 duration 大于 300 秒。
  • 调用 dbGetQuery() 执行查询,将结果赋给 results,然后查看输出。