Python および R モジュールを操作する
この記事では、相対パスを使用して、Databricks ノートブックと一緒にワークスペース ファイルに保存されているカスタム Python および R モジュールをインポートする方法について説明します。 ワークスペース ファイルを使用すると、より緊密な開発ライフサイクルが促進され、コードのモジュール化、 %run コマンドのインポート ステートメントへの変換、 Python wheelファイルのバージョン管理されたモジュールへのリファクタリングが可能になります。 組み込みの Databricks Web ターミナルを使用してコードをテストすることもできます。
注
Databricks Runtime 14.0 以降では、ローカルで実行されるコードの既定の現在の作業ディレクトリ (CWD) は、実行されているノートブックまたはスクリプトを含むディレクトリです。 これは、Databricks Runtime 13.3 LTS 以前からの動作の変更です。 「デフォルトの現在の作業ディレクトリは何ですか?」を参照してください。
Python モジュールと R モジュールをインポートする
重要
Databricks Runtime 13.3 LTS以降では、 Python sys.path
に追加されたディレクトリ、またはPythonパッケージとして構造化されたディレクトリは、クラスター内のすべてのエグゼキューターに自動的に配布されます。 Databricks Runtime 12.2 LTS以前では、sys.path
に追加されたライブラリをエグゼキューターに明示的にインストールする必要があります。
Databricks Runtime 11.3 LTS 以降では、ノートブックの現在の作業ディレクトリが Python パスに自動的に追加されます。 Git フォルダーを使用している場合は、ルート リポジトリ ディレクトリが追加されます。
別のディレクトリからモジュールをインポートするには、モジュールを含むディレクトリを sys.path
に追加する必要があります。 ディレクトリは、次の例のように相対パスを使用して指定できます。
import sys
import os
sys.path.append(os.path.abspath('..'))
ワークスペース ファイルに格納されているモジュールから関数をインポートするのは、クラスター ライブラリまたはノートブック スコープのライブラリとして保存されたモジュールからインポートする場合と同じです。
from sample import power
power.powerOfTwo(3)
source("sample.R")
power.powerOfTwo(3)
重要
import
ステートメントを使用すると、同じ名前のライブラリが複数存在する場合、Databricks は設定された優先順位に従います。Python ライブラリの優先順位を参照してください。
Python モジュールの自動リロード
Python コードの開発中に複数のファイルを編集する場合は、autoreload 拡張機能を有効にして、インポートされたモジュールを自動的に再読み込みし、コマンドの実行で編集が取得されるようにすることができます。 任意のノートブック セルまたは Python ファイルで次のコマンドを使用して、autoreload 拡張機能を有効にします。
%load_ext autoreload
%autoreload 2
自動リロードはドライバーでのみ機能し、UDF のエグゼキューターにコードを再読み込みしないことに注意してください。
DBR バージョン 15.4 以降の場合 Databricks の autoreload 拡張機能である LTS は、関数内部の変更に対するモジュールのターゲットを絞ったリロードをサポートします。 可能な限りモジュールの変更された部分だけをリロードすると、各オブジェクトの外部から見えるインスタンスが 1 つだけになり、より安全で信頼性が向上します。
自動再読み込み拡張機能の詳細については、 IPython の自動再読み込みに関するドキュメントを参照してください。
コードのリファクタリング
コード開発のベスト プラクティスは、簡単に再利用できるようにコードをモジュール化することです。 ワークスペース ファイルを使用してカスタム Python ファイルを作成し、 import
ステートメントを使用して、それらのファイル内のコードをノートブックで使用できるようにすることができます。
ノートブックコードを再利用可能なファイルにリファクタリングするには:
コードの新しいソース コード ファイルを作成します。
Python インポート ステートメントをノートブックに追加して、新しいファイルのコードをノートブックで使用できるようにします。
%run
コマンドからの移行
%run
コマンドを使用して、ノートブックで定義されている Python または R 関数を別のノートブックで使用できるようにする場合、またはクラスターにカスタム .whl
ファイルをインストールする場合は、それらのカスタム モジュールをワークスペース ファイルとして含めることを検討してください。このようにして、ノートブックと他のコード モジュールの同期を維持し、ノートブックで常に正しいバージョンが使用されるようにすることができます。
%run
コマンドを使用すると、あるノートブックを別のノートブックに含めることができ、サポートする Python または R コードをノートブックで使用できるようにするためによく使用されます。 この例では、 power.py
という名前のノートブックに次のコードが含まれています。
# This code is in a notebook named "power.py".
def n_to_mth(n,m):
print(n, "to the", m, "th power is", n**m)
その後、 %run
コマンドを使用して、 power.py
で定義された関数を別のノートブックで使用できるようにすることができます。
# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)
ワークスペース ファイルを使用すると、Python コードを含むモジュールを直接インポートし、関数を実行できます。
from power import n_to_mth
n_to_mth(3, 4)
Python .whl
ファイルを相対ライブラリにリファクタリングする
カスタム .whl
ファイルをクラスターにインストールし、そのクラスターにアタッチされたノートブックにインポートできます。 頻繁に更新されるコードの場合、このプロセスは煩雑でエラーが発生しやすい場合があります。 ワークスペース ファイルを使用すると、これらの Python ファイルをコードを使用するノートブックと同じディレクトリに保持して、ノートブックで常に正しいバージョンが使用されるようにすることができます。
Python プロジェクトのパッケージ化の詳細については、 このチュートリアルを参照してください。
Databricks Webターミナルをテストに使用する
Databricks Web ターミナルを使用すると、ファイルをノートブックにインポートしてノートブックを実行しなくても、Python または R コードへの変更をテストできます。
Webターミナルを開きます。
ディレクトリに移動します:
cd /Workspace/Users/<path-to-directory>/
.Python または R ファイル (
python file_name.py
またはRscript file_name.r
) を実行します。