Python と R のモジュールを使用する

この記事では、Databricks ノートブックと共にワークスペース ファイルに格納されている Python や R のカスタム モジュールを、相対パスを使用してインポートする方法について説明します。 ワークスペース ファイルを使用すると、開発ライフサイクルをより厳密に管理しやすくなり、コードのモジュール化%run コマンドの import ステートメントへの変換Python ホイール ファイルの、共同でバージョン管理されたモジュールへのリファクターを行えるようになります。 組み込みの Databricks Web ターミナルを使用してコードをテストすることもできます。

Note

Databricks Runtime 14.0 以降では、ローカルで実行されるコードの既定の現在の作業ディレクトリ (CWD) は、実行されているノートブックまたはスクリプトを含むディレクトリです。 これは、Databricks Runtime 13.3 LTS 以降の動作の変更です。 「既定の現在の作業ディレクトリとは?」を参照してください。

Python と R のモジュールをインポートする

重要

Databricks Runtime 13.3 LTS 以上では、Python の sys.path に追加されたディレクトリ、または Python パッケージとして構成されたディレクトリは、クラスター内のすべての Executor に自動的に配布されます。 Databricks Runtime 12.2 LTS 以前では、sys.path に追加されたライブラリを Executor に明示的にインストールする必要があります。

Databricks Runtime 11.3 LTS 以上では、ノートブックの現在の作業ディレクトリが Python パスに自動的に追加されます。 Git フォルダーを使用している場合は、ルート リポジトリ ディレクトリが追加されます。

別のディレクトリからモジュールをインポートするには、モジュールを含むディレクトリを sys.path に追加する必要があります。 次の例のように、相対パスを使用してディレクトリを指定できます。

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

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

Python

from sample import power
power.powerOfTwo(3)

R

source("sample.R")
power.powerOfTwo(3)

重要

import ステートメントを使用する場合、同じ名前のライブラリが複数あると、Databricks は設定された優先順位に従います。 「Python ライブラリの優先順位」を参照してください。

Python モジュールの自動再読み込み

Python コードの開発中に複数のファイルを編集している場合は、ノートブックのセルまたは Python ファイルで次のコマンドを使って、すべてのモジュールを強制的に再読み込みすることができます。

%load_ext autoreload
%autoreload 2

自動再読み込みはドライバーでのみ機能し、UDF の Executor にコードが再読み込みされることはありません。

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

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

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

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

%run コマンドから移行する

ノートブックで定義されている Python または R の関数を、%run コマンドを使用して別のノートブックで使用できるようにする場合、またはクラスターにカスタム .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 プロジェクトのパッケージ化の詳細については、こちらのチュートリアルを参照してください。

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

Azure Databricks Web ターミナルを使用して Python または R のコードへの変更をテストすることができ、ファイルをノートブックにインポートしてノートブックを実行する必要はありません。

  1. Web ターミナルを開きます。
  2. ディレクトリに移動します: cd /Workspace/Users/<path-to-directory>/
  3. Python または R のファイルを実行します: python file_name.py または Rscript file_name.r