Azure Databricks 上的 renv
renv 是一種 R 套件,可讓使用者管理筆記本專屬的 R 相依性。
使用 renv
,您可以建立及管理專案的 R 連結庫環境、視需要將這些連結庫的狀態儲存至 lockfile
,以及稍後還原連結庫。 這些工具一起有助於讓專案更隔離、可移植且可重現。
基本 renv
工作流程
本節內容:
- 安裝
renv
- 使用預安裝的 R 連結庫初始化
renv
工作階段 - 用來
renv
安裝其他套件 - 使用
renv
將 R Notebook 環境儲存至 DBFS renv
從 DBFS 重新安裝指定的lockfile
環境
安裝 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 Cache。
使用 renv
將 R Notebook 環境儲存至 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,即使叢集終止或重新啟動,也會保存它。
renv
從 DBFS 重新安裝指定的lockfile
環境
首先,請確定您的新叢集正在執行與您第一次建立 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"))
這會將您 lockfile
從 DBFS 複製到本機檔案系統,然後還原 中指定的 lockfile
任何套件。
注意
若要避免遺漏存放庫錯誤,請將和 SparkR
套件排除Rserve
在套件還原中。 這兩個套件都預安裝在所有運行時間中。
renv
緩存
的一個非常實用的功能 renv
是其 全域套件快取,它會在叢集上的所有 renv
專案上共用。 其可加速安裝時間並節省磁碟空間。 快renv
取不會快取透過 API 下載的套件,也不會install.packages()
快取除了 devtools
以外的pkgs
任何其他自變數。