Azure Databricks 上的 renv

renv 是一个 R 包,使用户能够管理特定于笔记本的 R 依赖项。

通过使用 renv,你可以为项目创建和管理 R 库环境,将这些库的状态保存到 lockfile,然后根据需要还原库。 结合使用这些工具有助于使项目更加独立、更具可移植性且更具可重现性。

基本 renv 工作流

本节内容:

安装 renv

可以将 renv 安装为群集范围内的库笔记本范围内的库。 若要将 renv 安装为笔记本范围内的库,请使用:

require(devtools)

install_version(
  package = "renv",
  repos   = "http://cran.us.r-project.org"
)

Databricks 建议将 CRAN 快照用作存储库来固定包版本

使用预安装的 R 库初始化 renv 会话

使用 renv 的第一步是使用 renv::init() 初始化会话。 设置 libPaths 将默认下载位置更改为 R 笔记本范围内的库路径

renv::init(settings = list(external.libraries=.libPaths()))
.libPaths(c(.libPaths()[2], .libPaths())

使用 renv 安装其他包

现在可以使用 renv 的 API 来安装和删除 R 包。 例如,若要安装最新版本的 digest,请在笔记本单元格内运行以下命令。

renv::install("digest")

若要安装旧版的 digest,请在笔记本单元格内运行以下命令。

renv::install("digest@0.6.18")

若要从 GitHub 安装 digest,请在笔记本单元格内运行以下命令。

renv::install("eddelbuettel/digest")

若要从 Bioconductor 安装包,请在笔记本单元格内运行以下命令。

# (note: requires the BiocManager package)
renv::install("bioc::Biobase")

请注意,renv::install API 使用 renv 缓存

使用 renv 将 R 笔记本环境保存到 DBFS

在保存环境之前,请运行一次以下命令。

renv::settings$snapshot.type("all")

这会将 renv 设置为对安装到 libPaths 中的所有包(而不仅是当前在笔记本中使用的包)拍摄快照。 有关详细信息,请参阅 renv 文档

现在,可以在笔记本单元格内运行以下命令以保存环境的当前状态。

renv::snapshot(lockfile="/dbfs/PATH/TO/WHERE/YOU/WANT/TO/SAVE/renv.lock", force=TRUE)

这将通过捕获安装在 libPaths 上的所有包来更新 lockfile。 此命令还将 lockfile 从本地文件系统移动到 DBFS,这样一来,即使终止或重启群集,它也仍然存在。

通过 DBFS 中的 lockfile 重新安装 renv 环境

首先,请确保新群集正在运行的 Databricks Runtime 版本与你首次创建 renv 环境时的 Databricks Runtime 版本相同。 这可确保预安装的 R 包完全相同。 可以在每个运行时的发行说明中找到这些运行时的列表。 安装 renv 后,在笔记本单元格内运行以下命令。

renv::init(settings = list(external.libraries=.libPaths()))
.libPaths(c(.libPaths()[2], .libPaths()))
renv::restore(lockfile="/dbfs/PATH/TO/WHERE/YOU/SAVED/renv.lock", exclude=c("Rserve", "SparkR"))

这会将 DBFS 中的 lockfile 复制到本地文件系统,然后还原 lockfile 中指定的任何包。

注意

若要避免出现缺少存储库的错误,请从包还原中排除 RserveSparkR 包。 这两个包预安装在所有运行时中。

renv缓存

renv 的一项非常有用的功能是它的全局包缓存,这在群集上的所有 renv 项目间共享。 它可以加速安装时间并节省磁盘空间。 renv 缓存不会缓存通过 devtools API 或带有除 pkgs 外任何参数的 install.packages() 下载的缓存包。