renv
on Databricks
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()
を使用してセッションを初期化することです。既定のダウンロード場所を R ノートブック スコープのライブラリ パスに変更するには、 libPaths
を設定します。
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")
これにより、ノートブックで現在使用されているパッケージだけでなく、 libPaths
にインストールされているすべてのパッケージのスナップショットを作成する renv
が設定されます。詳細については、 renv のドキュメント を参照してください。
これで、ノートブックセル内で以下を実行して、環境の現在の状態を保存できます。
renv::snapshot(lockfile="/dbfs/PATH/TO/WHERE/YOU/WANT/TO/SAVE/renv.lock", force=TRUE)
これにより、 libPaths
にインストールされているすべてのパッケージをキャプチャして lockfile
を更新します。また、 lockfile
をローカルファイルシステムから DBFSに移動し、クラスターが終了または再起動しても保持されます。
DBFS からの lockfile
を指定して renv
環境を再インストールする
まず、新しいクラスターで、 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
で指定されたパッケージが復元されます。
注
リポジトリの欠落エラーを回避するには、パッケージの復元から Rserve
パッケージと SparkR
パッケージを除外します。 これらのパッケージは両方とも、すべてのランタイムにプリインストールされています。
renv
キャッシュ
renv
の非常に便利な機能は、クラスター上のすべての renv
プロジェクトで共有される グローバルパッケージキャッシュです。インストール時間を短縮し、ディスクスペースを節約します。 renv
キャッシュは、 devtools
API を介してダウンロードされたパッケージをキャッシュしないか、 pkgs
以外の追加の引数を持つ install.packages()
をキャッシュしません。