Python および R モジュールを操作する

October 17, 2024

この記事では、相対パスを使用して、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に追加する必要があります。 ディレクトリは、次の例のように相対パスを使用して指定できます。

Python
import sys
import os
sys.path.append(os.path.abspath('..'))

ワークスペース ファイルに格納されているモジュールから関数をインポートするのは、クラスター ライブラリまたはノートブック スコープのライブラリとして保存されたモジュールからインポートする場合と同じです。

from sample import power
power.powerOfTwo(3)

重要

import ステートメントを使用し、同じ名前のライブラリが複数存在する場合、 Databricks は優先順位ルールを使用してロードするライブラリを決定します。 Python ライブラリの優先順位を参照してください。

Python モジュールの自動リロード

Python コードの開発中に複数のファイルを編集している場合は、 autoreload 拡張機能を有効にして、インポートされたモジュールを自動的に再読み込みし、コマンド実行でそれらの編集が取得されるようにすることができます。 ノートブックのセルまたは Python ファイルで次のコマンドを使用して、 autoreload 拡張機能を有効にします。

Python
%load_ext autoreload
%autoreload 2

autoreload 拡張機能は Spark ドライバー プロセスでのみ機能し、コードを Spark エグゼキューター プロセスに再読み込みしません。これは Spark ドライバーノードでのみ機能し、Spark エグゼキューターを実行しているノードでは機能しないため、ワーカーノードで実行されるモジュール (UDF など) を開発する場合は autoreload を使用しないでください。

Databricks Runtime 16.0 以降では、Databricks の autoreload 拡張機能に次の機能が追加されています。

  • 関数内部の変更のためのモジュールのターゲットを絞ったリロードのサポート。 可能な限りモジュールの変更された部分だけをリロードすることで、各オブジェクトの外部から見えるインスタンスが 1 つだけになり、より安全で信頼性が向上します。

  • ワークスペース ファイルから Python モジュールをインポートすると、モジュールが前回のインポート以降に変更された場合、Databricks は autoreload の使用を自動的に提案します。

autoreload 拡張機能の詳細については、IPython の自動再読み込みに関するドキュメントを参照してください。

コードのリファクタリング

コード開発のベスト プラクティスは、簡単に再利用できるようにコードをモジュール化することです。 ワークスペース ファイルを使用してカスタム Python ファイルを作成し、 import ステートメントを使用して、それらのファイル内のコードをノートブックで使用できるようにすることができます。

ノートブックコードを再利用可能なファイルにリファクタリングするには:

  1. コードの新しいソース コード ファイルを作成します。

  2. Python インポート ステートメントをノートブックに追加して、新しいファイルのコードをノートブックで使用できるようにします。

%run コマンドからの移行

%runコマンドを使用して、ノートブックで定義された Python または R 関数を別のノートブックで使用できるようにする場合、またはクラスターにカスタム .whl ファイルをインストールする場合は、それらのカスタムモジュールをワークスペースファイルとして含めることを検討してください。これにより、ノートブックと他のコードモジュールの同期を維持し、ノートブックが常に正しいバージョンを使用するようにすることができます。

%run コマンドを使用すると、1 つのノートブックを別のノートブックに含めることができ、多くの場合、サポートする Python または R コードをノートブックで使用できるようにするために使用されます。 この例では、 power.py という名前のノートブックに次のコードが含まれています。

Python
# 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 で定義された関数を別のノートブックで使用できるようにすることができます。

Python
# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)

ワークスペース ファイルを使用すると、Python コードを含むモジュールを直接インポートし、関数を実行できます。

Python
from power import n_to_mth
n_to_mth(3, 4)

Python .whl ファイルを相対ライブラリにリファクタリングする

カスタム .whl ファイルをクラスターにインストールし、そのクラスターにアタッチされたノートブックにインポートできます。 ただし、このプロセスは、頻繁に更新されるコードでは煩雑でエラーが発生しやすい場合があります。 ワークスペース ファイルを使用すると、これらの Python ファイルをコードを使用するノートブックと同じディレクトリに保持できるため、ノートブックで常に正しいバージョンが使用されます。

Python プロジェクトのパッケージ化の詳細については、 このチュートリアルを参照してください。

Databricks Webターミナルをテストに使用する

Databricks Webターミナルを使用すると、ノートブックを使用してファイルをインポートおよび実行することなく、PythonまたはRコードへの変更をテストできます。

  1. Webターミナルを開きます。

  2. ディレクトリに移動します: cd /Workspace/Users/<path-to-directory>/.

  3. Python または R ファイル ( python file_name.py または Rscript file_name.r) を実行します。