适用于 R 开发人员的 Azure Databricks
本部分提供了一个指南,用于指导如何使用 R 语言在 Azure Databricks 中开发笔记本和作业。
入门的基本工作流是:
- 导入代码:从文件或 Git 存储库导入自己的代码,或者尝试下面列出的教程。 Databricks 建议了解如何使用交互式 Azure Databricks 笔记本。
- 在群集上运行代码:创建自己的群集,或确保你有权使用共享群集。 将笔记本附加到群集,并运行笔记本。
除此之外,还可以扩展到更具体的主题:
- 使用 Apache Spark 处理较大数据集
- 添加可视化效果
- 将工作负载自动化为作业
- 使用机器学习分析数据
- 使用 R 开发人员工具
以下教程提供示例代码和笔记本来了解常见工作流。 有关将笔记本示例导入工作区的说明,请参阅导入笔记本。
以下小节列出了一些关键功能和提示,可帮助你开始在 Azure Databricks 中使用 R 进行开发。
Azure Databricks 支持两个 API,这些 API 为 Apache Spark 提供 R 接口:SparkR 和 sparklyr。
这些文章提供了有关 SparkR 的简介和参考。 SparkR 是 Apache Spark 的 R 接口,提供分布式数据帧实现。 SparkR 支持大型数据集上的选择、筛选和聚合(类似于 R 数据帧)等操作。
本文介绍 sparklyr。 sparklyr 是 Apache Spark 的 R 接口,提供类似于 dplyr、broom
和 DBI 的功能。
本文介绍 SparkR 和 sparklyr 之间的主要相似之处和差异。
本文介绍如何使用 R、SparkR、sparklyr 和 dplyr,在 Azure Databricks 中处理 R data.frames、Spark DataFrame 和 Spark 表。
Azure Databricks 笔记本 支持 R。这些笔记本提供了类似于 Jupyter 的功能,但增加了诸如使用大数据的内置可视化,用于调试和性能监视的 Apache Spark 集成以及用于跟踪机器学习实验的 MLflow 集成等功能。 通过导入笔记本开始。 拥有对群集的访问权限后,可以将笔记本附加到群集并运行笔记本。
通过 Azure Databricks Git 文件夹,用户可以将笔记本和其他文件与 Git 存储库同步。 Azure Databricks Git 文件夹有助于代码版本控制与协作,并且可以简化将完整的代码存储库导入 Azure Databricks、查看过去的笔记本版本以及与 IDE 开发集成的操作。 通过克隆远程 Git 存储库开始。 然后,可以使用存储库克隆打开或创建笔记本,将笔记本附加到群集,并运行笔记本。
Azure Databricks 计算为单节点和大型群集提供计算管理。 可以根据需求自定义群集硬件和库。 数据科学家通常通过创建群集或使用现有的共享群集来开始工作。 拥有对群集的访问权限后,可以向群集附加笔记本或在群集上运行作业。
Azure Databricks 群集由一个 Apache Spark 驱动程序节点以及零个或多个 Spark 工作器(也称为执行程序)节点组成。 驱动程序节点维护附加的笔记本状态,维护 SparkContext
,解释笔记本和库命令,并运行与 Spark 执行器相协调的 Spark 主节点。 工作器节点运行 Spark 执行程序,每个工作器节点有一个 Spark 执行程序。
单节点群集有一个驱动程序节点,但没有工作器节点,Spark 在本地模式下运行以支持访问由 Azure Databricks 管理的表。 单节点群集支持 RStudio、笔记本和库,对于不依赖 Spark 进行大数据或并行处理的 R 项目非常有用。 请参阅单节点或多节点计算。
对于 R 难以处理的数据大小(GB 或 PB 量级),应改用多节点或分布式群集。 分布式群集有一个驱动程序节点以及一个或多个工作器节点。 分布式群集不仅支持 RStudio、笔记本和库,而且支持 SparkR 和 sparklyr 等 R 包,这些 R 包采用独特设计,可通过 SparkContext
使用分布式群集。 这些包提供用户熟悉的 SQL 和数据帧 API,可用于跨工作器节点并行分配和运行各种 Spark 任务与命令。 若要详细了解 sparklyr 和 SparkR,请参阅 SparkR 和 sparklyr 的比较。
一些专门利用跨工作器节点分配相关工作的功能的 SparkR 和 sparklyr 函数包括:
- sparklyr::spark_apply:在群集内部大规模运行任意 R 代码。 要使用仅在 R 中提供的功能,或者要使用 Apache Spark 中不提供的 R 包或其他 Spark 包,此函数特别有用。
- SparkR::dapply:将指定的函数应用于
SparkDataFrame
的每个分区。 - SparkR::dapplyCollect:将指定的函数应用于
SparkDataFrame
的每个分区,并将结果作为data.frame
收集回到 R。 - SparkR::gapply:使用指定的列对
SparkDataFrame
进行分组,并将指定的 R 函数应用于每个组。 - SparkR::gapplyCollect:使用指定的列对
SparkDataFrame
进行分组,将指定的 R 函数应用于每个组,并将结果作为data.frame
收集回到 R。 - SparkR::spark.lapply:对元素列表运行指定的函数,并使用 Spark 分配计算。
有关示例,请参阅笔记本分布式 R:Spark 中的用户的定义函数。
Databricks 容器服务允许你在创建群集时指定 Docker 映像。 Databricks 在 Docker Hub 中提供了 databricksruntime/rbase 基础映像作为示例,以启动支持 R 的 Databricks 容器服务群集。 另请参阅用于生成此基础映像的 Dockerfile。
Azure Databricks 群集使用 Databricks Runtime,它提供了许多开箱即用的常用库,包括 Apache Spark、Delta Lake 等。 你还可以将其他第三方或自定义 R 包安装到库中,以用于笔记本和作业。
从 Databricks Runtime 发行说明版本和兼容性中的默认库开始。 将用于机器学习的 Databricks Runtime 用于机器学习工作负载。 有关预安装库的完整列表,请参阅 Databricks Runtime 发行说明版本和兼容性 中目标 Databricks Runtime 的“已安装的 R 库”部分。
可以使用笔记本范围的 R 库自定义环境,这些库使你能够使用 CRAN 或其他存储库中的库修改笔记本或作业环境。 为此,可以使用 utils
中熟悉的 install.packages 函数。 以下示例从默认 CRAN 存储库安装 Arrow R 包:
install.packages("arrow")
如果需要比 Databricks Runtime 中包含的版本更旧的版本,可以使用笔记本从 devtools
运行 install_version 函数。 以下示例从 CRAN 安装 dplyr 版本 0.7.4:
require(devtools)
install_version(
package = "dplyr",
version = "0.7.4",
repos = "http://cran.r-project.org"
)
通过此方式安装的包可在整个群集中使用。 它们的范围限定为安装它们的用户。 这使你能够在同一计算机上安装同一个包的多个版本,而不会产生包冲突。
可以根据需要将其他库安装为群集库,例如从 CRAN 安装。 为此,请在群集用户界面中单击“库”>“安装新”>“CRAN”,并指定库的名称。 当想要使用 SparkR 或 sparklyr 调用用户定义的函数时,此方法尤为重要。
有关详细信息,请参阅库。
若要将自定义包安装到库中:
从命令行或使用 RStudio 生成自定义包。
将自定义包文件从开发计算机复制到 Azure Databricks 工作区。 有关选项,请参阅库。
通过运行
install.packages
将自定义包安装到库中。例如,从工作区中的笔记本安装:
install.packages( pkgs = "/path/to/tar/file/<custom-package>.tar.gz", type = "source", repos = NULL )
或:
%sh R CMD INSTALL /path/to/tar/file/<custom-package>.tar.gz
将自定义包安装到库中后,将该库添加到搜索路径,然后使用单个命令加载该库。
例如:
# Add the library to the search path one time.
.libPaths(c("/path/to/tar/file/", .libPaths()))
# Load the library. You do not need to add the library to the search path again.
library(<custom-package>)
若要将自定义包作为库安装在群集中的每个节点上,请务必参阅什么是 init 脚本?。
Azure Databricks R 笔记本使用 display
函数支持各种类型的可视化效果。
可以在 Azure Databricks 中按计划或触发笔记本作业自动执行 R 工作负载。
- 有关通过 UI 创建作业的详细信息,请参阅配置和编辑 Databricks 作业。
- 利用作业 API,可以创建、编辑和删除作业。
- Databricks CLI 提供了一个便捷的命令行接口用来调用作业 API。
Databricks 支持各种机器学习 (ML) 工作负载,包括表格数据的传统 ML、用于计算机视觉和自然语言处理的深度学习、推荐系统、图形分析等。 有关 Azure Databricks 上的机器学习的常规信息,请参阅用于机器学习的 Databricks Runtime。
对于 ML 算法,可以使用用于机器学习的 Databricks Runtime 中的预安装库。 还可以安装自定义库。
对于机器学习操作 (MLOps),Azure Databricks 为开放源代码库 MLflow 提供托管服务。 使用 MLflow 跟踪,你可以记录模型开发并以可重用格式保存模型。 你可以使用 MLflow 模型注册表来管理模型并将其自动提升到生产。 使用作业和模型服务,可以成批托管模型,并将作业作为 REST 终结点进行流式处理。 有关详细信息和示例,请参阅使用 MLflow 或 MLflow R API 文档的 ML 生命周期管理。
除了 Azure Databricks 笔记本以外,还可以使用以下 R 开发人员工具:
将 SparkR 和 RStudio Desktop 与 Databricks Connect 配合使用。
将 sparklyr 和 RStudio Desktop 与 Databricks Connect 配合使用。
在 Databricks Runtime 12.2 LTS 及更高版本中,可以使用站点范围的配置文件 (.Rprofile
) 自定义 R 会话。 在启动期间,R 笔记本将该文件用作 R 代码的源。 若要修改该文件,请找到 R_HOME
的值并修改 $R_HOME/etc/Rprofile.site
。 请注意,Databricks 在该文件中添加了配置,以确保为 Azure Databricks 上托管的 RStudio 提供正常的功能。 删除其中的任何一个配置都可能导致 RStudio 无法按预期工作。
在 Databricks Runtime 11.3 LTS 及更低版本中,可以通过设置环境变量 DATABRICKS_ENABLE_RPROFILE=true
来启用此行为。