重要
このドキュメントは廃止され、更新されない可能性があります。
Databricks では、Databricks Labs の dbx ではなく、Databricks アセット バンドルを使用することが推奨されています。 「Databricks アセット バンドルとは?」と「dbx からバンドルへの移行」参照してください。
Visual Studio Code で Azure Databricks を使用するには、Visual Studio Code 用の Databricks 拡張機能に関する記事をご覧ください。
この記事では、Python と互換性がある任意の IDE で操作できる Python ベースのコード サンプルについて説明します。 具体的には、この記事では、次の開発者の生産性特徴を提供する Visual Studio Code でこのコード サンプルを操作する方法について説明します。
この記事では、Databricks Labs による dbx と Visual Studio Code を使用して、リモートの Azure Databricks ワークスペースにコード サンプルを送信します。
dbxは、そのワークスペース内の Azure Databricks ジョブ クラスターで送信されたコードを実行するように Azure Databricks に Lakeflow ジョブに指示します。
一般的なサード パーティの Git プロバイダーを使用して、コードのバージョン管理と継続的インテグレーションと継続的デリバリー、継続的デプロイ (CI/CD) を行うことができます。 バージョン コントロールの場合、これらの Git プロバイダーには次のものが含まれます。
- GitHubの
- Bitbucket
- GitLab
- Azure DevOps (Azure China リージョンでは利用できません)
- AWS CodeCommit
- GitHub AE
CI/CD の場合、dbx では次の CI/CD プラットフォームがサポートされます。
バージョン コントロールと CI/CD のしくみを示すために、この記事では、Visual Studio Code dbx の使用方法と、このコード サンプル、および GitHub と GitHub Actions について説明します。
コード サンプルの要件
このコード サンプルを使用するには、次のものが必要です。
- Azure Databricks アカウント 内の Azure Databricks ワークスペース。
- GitHub アカウント。 アカウントがまだない場合は、GitHub アカウントを作成します。
さらに、ローカル開発マシンに次のものがある必要があります。
Python バージョン 3.8 以降。
ターゲット クラスターにインストールされているバージョンと一致するバージョンの Python を使用する必要があります。 既存のクラスターにインストールされている Python のバージョンを取得するには、クラスターの Web ターミナル を使用して
python --versionコマンドを実行します。 ターゲット クラスターの Databricks Runtime バージョンについては、Databricks Runtime リリース ノートのバージョンと互換性」の「システム環境」セクションも参照してください。 いずれの場合も、Python のバージョンは 3.8 以降である必要があります。ローカル コンピューターで現在参照されている Python のバージョンを取得するには、ローカル ターミナルから
python --versionを実行します。 (ローカル コンピューターで Python を設定する方法によっては、この記事のpython3ではなくpythonの実行が必要になる場合があります。)「Python インタープリターを選択する」も参照してください。pip。
pipは、新しいバージョンの Python で自動的にインストールされます。pipが既にインストールされているかどうかを確認するには、ローカル ターミナルからpip --versionを実行します。 (ローカル コンピューターで Python やpipを設定する方法によっては、この記事のpip3ではなくpipの実行が必要になる場合があります。)dbx バージョン 0.8.0 以上。
dbxを実行することで、Python パッケージ インデックス (PyPI) からpip install dbxパッケージをインストールできます。注意
今すぐ
dbxをインストールする必要はありません。 後でコード サンプルの [セットアップ] セクションでインストールできます。Python 仮想環境を作成して、
dbxプロジェクトで正しいバージョンの Python とパッケージの依存関係を使用していることを確認します。 この記事では、pipenv について説明しています。Databricks CLI バージョン 0.18 以前では、認証を使って設定します。
注意
レガシ Databricks CLI (Databricks CLI バージョン 0.17) をここでインストールする必要はありません。 後でコード サンプルの [セットアップ] セクションでインストールできます。 後でインストールする場合は、代わりにその時点で認証を設定する必要があります。
Visual Studio Code 用の Python 拡張機能。
Visual Studio Code 用の GitHub Pull Requests and Issues 拡張機能。
Git。
コード サンプルについて
この記事の Python コード サンプルは、GitHubの databricks/ide-best-practices リポジトリで入手でき、次の処理を行います。
- GitHub の owid/covid-19-data リポジトリからデータを取得します。
- 特定の ISO 国番号のデータをフィルター処理します。
- データからピボット テーブルを作成します。
- データに対してデータ クレンジングを実行します
- コード ロジックを再利用可能な関数にモジュール化します。
- 関数を単体テストします。
- リモート Azure Databricks ワークスペースの Delta テーブルにデータを書き込むコードを有効にするプロジェクト構成と設定を
dbxに入力します。
コード サンプルを設定します。
このコード サンプルの要件を満たしたら、次の手順を実行してコード サンプルの使用を開始します。
注意
これらの手順には、CI/CD 用のこのコード サンプルの設定は含まれません。 このコード サンプルを実行するために CI/CD を設定する必要はありません。 後で CI/CD を設定する場合は、「GitHub Actions で実行する」を参照してください。
手順 1: Python 仮想環境を作成する
ターミナルから、このコード サンプルの仮想環境を含む空のフォルダーを作成します。 この手順では、
ide-demoという名前の親フォルダーを使用します。 このフォルダーには任意の名前を付けることができます。 別の名前を使用する場合は、この記事に出てくる名前を置き換えます。 フォルダーを作成したら、そこに切り替えて、そのフォルダーから Visual Studio Code を開始します。.コマンドの後には必ずドット (code) を含めてください。Linux および macOS の場合:
mkdir ide-demo cd ide-demo code .ヒント
エラー
command not found: codeが表示される場合は、Microsoft Web サイトの「コマンド ラインからの起動」を参照してください。Windows の場合:
md ide-demo cd ide-demo code .Visual Studio Code のメニュー バーで、[ビュー] > [ターミナル] の順にクリックします。
ide-demoフォルダーのルートから、次のオプションを使用してpipenvコマンドを実行します。ここで、<version>は、既にローカルにインストールされている Python のターゲット バージョン (および、ターゲット クラスターの Python のバージョンに一致するバージョン) です (たとえば、3.8.14)。pipenv --python <version>次の手順で必要になるため、
Virtualenv locationコマンドの出力のpipenv値を書き留めます。ターゲットの Python インタープリターを選択し、Python 仮想環境をアクティブにします。
メニュー バーで、[ビュー] > [コマンド パレット] の順にクリックし、
Python: Selectを入力し、次に [Python: インタープリターを選択する] をクリックします。先ほど作成した Python 仮想環境へのパス内で Python インタープリターを選択します (このパスは、
Virtualenv locationコマンドの出力のpipenv値として一覧表示されます)。メニュー バーで、[ビュー] > [コマンド パレット] の順にクリックし、
Terminal: Createを入力し、次に [ターミナル: 新しいターミナルの作成] をクリックします。コマンド プロンプトで、
pipenvシェル内にいることを確認します。 確認のため、コマンド プロンプトの前に(<your-username>)のようなものが表示されます。 表示されない場合は、次のコマンドを実行します。pipenv shellpipenvシェルを終了する場合にはコマンドexitを実行すると、かっこが消えます。
詳細については、Visual Studio Code ドキュメントの「VS Code での Python 環境の使用」を参照してください。
手順 2: GitHub からコード サンプルを複製する
- Visual Studio Code で、まだ開いていない場合は、
ide-demoフォルダー ([ファイル] > [フォルダーを開く]) を開きます。 -
[表示] > [コマンド パレットの表示] の順にクリックして
Git: Cloneを入力し、[Git: 複製] をクリックします。 -
リポジトリ URL を指定するか、リポジトリ ソースを選択するには、
https://github.com/databricks/ide-best-practicesを入力します -
ide-demoフォルダーを参照し、[リポジトリの場所の選択] をクリックします。
手順 3: コード サンプルの依存関係をインストールする
お使いのバージョンの Python と互換性のあるバージョンの
dbxと Databricks CLI バージョン 0.18 以前をインストールします。 これを行うには、ターミナルの Visual Studio Code で、ide-demoシェルがアクティブ化されたpipenvフォルダー (pipenv shell) から次のコマンドを実行します。pip install dbxdbxがインストールされていることを確認します。 そのためには、次のコマンドを実行します。dbx --versionバージョン番号が返された場合は、
dbxがインストールされています。バージョン番号が 0.8.0 未満の場合は、次のコマンドを実行して
dbxをアップグレードし、バージョン番号をもう一度検査します。pip install dbx --upgrade dbx --version # Or ... python -m pip install dbx --upgrade dbx --versiondbxをインストールすると、レガシ Databricks CLI (Databricks CLI バージョン 0.17) も自動的にインストールされます。 レガシ Databricks CLI (Databricks CLI バージョン 0.17) がインストールされていることを確認するには、次のコマンドを実行します。databricks --versionDatabricks CLI バージョン 0.17 が返された場合、レガシ Databricks CLI がインストールされています。
認証でレガシ Databricks CLI (Databricks CLI バージョン 0.17) を設定していない場合、今すぐ設定する必要があります。 認証が設定されていることを確認するには、次の基本コマンドを実行して、Azure Databricks ワークスペースの概要情報を取得します。
/サブコマンドの後に必ずスラッシュ (ls) を含めてください。databricks workspace ls /ワークスペースのルート レベルのフォルダー名の一覧が返された場合は、認証が設定されています。
このコード サンプルが依存する Python パッケージをインストールします。 これを行うには、
ide-demo/ide-best-practicesフォルダーから次のコマンドを実行します。pip install -r unit-requirements.txtコード サンプルの依存パッケージがインストールされていることを確認します。 そのためには、次のコマンドを実行します。
pip listrequirements.txtにリストされているパッケージとunit-requirements.txtファイルがこのリストのどこかにある場合は、依存パッケージがインストールされています。注意
requirements.txtにリストされているファイルは、特定のパッケージ バージョン用です。 互換性を高めるために、これらのバージョンを、後でデプロイを実行するために Azure Databricks ワークスペースで使用するクラスター ノードの種類と相互参照できます。 Databricks Runtime リリース ノートのバージョンと互換性については、クラスターの Databricks Runtime バージョンの「システム環境」セクションを参照してください。
手順 4: Azure Databricks ワークスペースのコード サンプルをカスタマイズする
リポジトリの
dbxプロジェクト設定をカスタマイズします。 これを行うには、.dbx/project.jsonファイル内のprofileオブジェクトの値をDEFAULTから、レガシ Databricks CLI (Databricks CLI バージョン 0.17) を使用して認証用に設定したものと一致するプロファイルの名前に変更します。 既定以外のプロファイルを設定していない場合は、DEFAULTをそのままにしておきます。 次に例を示します。{ "environments": { "default": { "profile": "DEFAULT", "storage_type": "mlflow", "properties": { "workspace_directory": "/Workspace/Shared/dbx/covid_analysis", "artifact_location": "dbfs:/Shared/dbx/projects/covid_analysis" } } }, "inplace_jinja_support": false }dbxプロジェクトの配置設定をカスタマイズします。 これを行うには、conf/deployment.ymlファイルのspark_versionおよびnode_type_idオブジェクトの値を、10.4.x-scala2.12およびm6gd.largeから、Azure Databricks ワークスペースでデプロイの実行に使用する Azure Databricks ランタイム バージョン文字列とクラスター ノードの型に変更します。たとえば、Databricks Runtime 10.4 LTS と
Standard_DS3_v2ノードの型を指定するには、次のようにします。environments: default: workflows: - name: 'covid_analysis_etl_integ' new_cluster: spark_version: '10.4.x-scala2.12' num_workers: 1 node_type_id: 'Standard_DS3_v2' spark_python_task: python_file: 'file://jobs/covid_trends_job.py' - name: 'covid_analysis_etl_prod' new_cluster: spark_version: '10.4.x-scala2.12' num_workers: 1 node_type_id: 'Standard_DS3_v2' spark_python_task: python_file: 'file://jobs/covid_trends_job.py' parameters: ['--prod'] - name: 'covid_analysis_etl_raw' new_cluster: spark_version: '10.4.x-scala2.12' num_workers: 1 node_type_id: 'Standard_DS3_v2' spark_python_task: python_file: 'file://jobs/covid_trends_job_raw.py'
ヒント
この例では、これら 3 つのジョブ定義には同じ spark_version 値と node_type_id 値があります。 ジョブ定義ごとに異なる値を使用できます。 また、共有値を作成し、ジョブ定義間で再利用して、入力エラーやコード メンテナンスの手間を減らすこともできます。
ドキュメントの dbx の例を参照してください。
コード サンプルを検証する
コード サンプルを設定した後、次の情報を使用して、ide-demo/ide-best-practices フォルダー内のさまざまなファイルがどのように動作するかを確認します。
コードのモジュール化
変更されていないコード
jobs/covid_trends_job_raw.py ファイルは、コード ロジックの変更されていないバージョンです。 このファイルは単独で実行できます。
モジュール化されているコード
jobs/covid_trends_job.py ファイルはモジュール化されているコード ロジックのバージョンです。 このファイルは、covid_analysis/transforms.py ファイル内の共有コードに依存します。
covid_analysis/__init__.py ファイルは covide_analysis フォルダーを、パッケージを含むものとして扱います。
テスト
単体テスト
この tests/testdata.csv ファイルには、テスト目的で covid-hospitalizations.csv ファイル内の少量のデータが含まれています。
tests/transforms_test.py ファイルには、covid_analysis/transforms.py ファイルの単体テストが含まれています。
単体テスト ランナー
この pytest.ini ファイルには、pytest を使用してテストを実行するための構成オプションが含まれています。
ドキュメントの「pytest.iniとpytest」を参照してください。
この .coveragerc ファイルには、coverage.py を使用した Python コード カバレッジ測定の構成オプションが含まれています。
ドキュメントの「coverage.py」を参照してください。
前に requirements.txt を使用して実行した unit-requirements.txt ファイルのサブセットである pip ファイルには、単体テストも依存するパッケージの一覧が含まれています。
梱包
この setup.py ファイルには、pip コマンドなど、コンソールで実行するコマンド (コンソール スクリプト) が用意されています。このコマンドでは、Python プロジェクトを setuptools でパッケージ化します。
ドキュメントの「setuptools」を参照してください。
他のファイル
このコード サンプルには、前に説明していない他のファイルがあります。
-
.github/workflowsフォルダーには、GitHub Actions を表す 3 つのファイルであるdatabricks_pull_request_tests.yml、onpush.yml、およびonrelease.yamlが含まれています。このファイルについては、後の GitHub Actions セクションで説明します。 - この
.gitignoreファイルには、Git がリポジトリに対して無視するローカル フォルダーとファイルの一覧が含まれています。
コード サンプルの実行
次のサブセクションで説明されているように、dbx をローカル コンピューターで使用して、リモート ワークスペースでコード サンプルをオンデマンドで実行するように Azure Databricks に指示できます。 または、GitHub Actions を使用して、コードの変更を GitHub リポジトリにプッシュするたびに GitHub にコード サンプルを実行させることができます。
dbx を使用して実行する
covid_analysisプロジェクトのルート (setuptoolsフォルダーなど) から次のコマンドを実行して、Pythondbxでide-demo/ide-best-practicesフォルダーの内容をパッケージとしてインストールします。 このコマンドの末尾のドット (.) を忘れずに含めてください。pip install -e .このコマンドは、
covid_analysis.egg-infoのコンパイル済みバージョンとcovid_analysis/__init__.pyファイルに関する情報を含むcovid_analysis/transforms.pyフォルダーを作成します。次のコマンドを実行して、テストを実行します。
pytest tests/テストの結果がターミナルに表示されます。 4 つのテストがすべて合格と表示される必要があります。
ヒント
R ノートブックと Scala ノートブックのテストなど、テストのその他の方法については、ノートブックの単体テストに関するページを参照してください。
必要に応じて、次のコマンドを実行して、テストのテスト カバレッジ メトリックを取得します。
coverage run -m pytest tests/注意
coverageが見つからないというメッセージが表示された場合は、pip install coverageを実行して、もう一度やり直してください。テスト カバレッジの結果を表示するには、次のコマンドを実行します。
coverage report -m4 つのテストがすべて成功した場合は、次のコマンドを実行して、
dbxプロジェクトの内容を Azure Databricks ワークスペースに送信します。dbx deploy --environment=defaultプロジェクトとその実行に関する情報は、
workspace_directoryファイル内の.dbx/project.jsonオブジェクトで指定された場所に送信されます。プロジェクトの内容は、
artifact_locationファイル内の.dbx/project.jsonオブジェクトで指定された場所に送信されます。次のコマンドを実行して、ワークスペースで実稼働前バージョンのコードを実行します。
dbx launch covid_analysis_etl_integ実行の結果へのリンクがターミナルに表示されます。 これは、次のようになります。
https://<your-workspace-instance-id>/?o=1234567890123456#job/123456789012345/run/12345Web ブラウザーで次のリンクに従って、実行の結果をワークスペースに表示します。
次のコマンドを実行して、ワークスペースでコードの実稼働バージョンを実行します。
dbx launch covid_analysis_etl_prod実行の結果へのリンクがターミナルに表示されます。 これは、次のようになります。
https://<your-workspace-instance-id>/?o=1234567890123456#job/123456789012345/run/23456Web ブラウザーで次のリンクに従って、実行の結果をワークスペースに表示します。
GitHub Actions を使用してスキャンする
プロジェクトの .github/workflows フォルダーで、 onpush.yml ファイルと GitHub Actions ファイル onrelease.yml 次の操作を行います。
-
vで始まるタグへのプッシュごとに、dbxを使用してcovid_analysis_etl_prodジョブをデプロイします。 - 各プッシュは、
vで始まるタグに対しては行われません。-
pytestを使用して単体テストを実行します。 -
dbxを使用して、covid_analysis_etl_integジョブで指定されたファイルをリモート ワークスペースにデプロイします。 -
dbxを使用して、リモート ワークスペース上のcovid_analysis_etl_integジョブで指定されている既にデプロイされているファイルを起動し、完了するまでこの実行をトレースします。
-
注意
追加の GitHub Actions ファイルである databricks_pull_request_tests.yml は、onpush.yml および onrelease.yml の GitHub Actions ファイルに影響を与えることなく、実験のためのテンプレートとして提供されます。 このコード サンプルは、databricks_pull_request_tests.yml GitHub Actions ファイルなしで実行できます。 その使用法はこの記事では扱われていません。
次のサブセクションでは、onpush.yml および onrelease.yml の GitHub Actions ファイルをセットアップして実行する方法について説明します。
GitHub Actions を使用するように設定する
CI/CD のサービス プリンシパルの手順に従って、Azure Databricks ワークスペースを設定します。 これには、次のアクションが含まれます。
- サービス プリンシパルを作成する。
- サービス プリンシパルの Microsoft Entra ID トークンを作成します。
Databricks は、セキュリティのベスト プラクティスとして、GitHub を Azure Databricks ワークスペースで認証するために、ワークスペース ユーザーの Databricks 個人用アクセス トークンではなく、サービス プリンシパルの Microsoft Entra ID トークンを使用することを推奨しています。
サービス プリンシパルとその Microsoft Entra ID トークンを作成したら、作業を止めて、次のセクションで使用する Microsoft Entra ID トークンの値をメモします。
GitHub Actions を実行する
手順 1: 複製したリポジトリを公開する
- Visual Studio Code のサイドバーで、GitHub アイコンをクリックします。 アイコンが表示されない場合は、最初に [拡張機能] ビュー (拡張機能の表示) を使用して >GitHub Pull Requests and Issues 拡張機能を有効にします。
- [サインイン] ボタンが表示されている場合は、それをクリックし、画面の指示に従って GitHub アカウントにサインインします。
- メニュー バーで、[ビュー] > [コマンド パレット] の順にクリックし、
Publish to GitHubを入力し、次に [GitHub に公開する] をクリックします。 - 複製したリポジトリを GitHub アカウントに公開するオプションを選択します。
手順 2: 暗号化されたシークレットをリポジトリに追加する
次の暗号化されたシークレットについては、公開したリポジトリの GitHub Web サイトのリポジトリの暗号化されたシークレットの作成に関するページの手順に従います。
-
DATABRICKS_HOSTなど、ワークスペースごとの URL の値に設定された、https://adb-1234567890123456.7.azuredatabricks.netという名前の暗号化されたシークレットを作成します。 - サービス プリンシパルの Microsoft Entra ID トークンの値に設定された、
DATABRICKS_TOKENという名前の暗号化されたシークレットを作成します。
手順 3: リポジトリにブランチを作成して公開する
- Visual Studio Code の[ソース管理] ビュー ([ビュー] > [ソース管理]) で、...([ビューと他のアクション]) アイコンをクリックします。
- [ブランチ] > [次からブランチを作成] の順にクリックします。
- ブランチの名前を入力します (例:
my-branch)。 - ブランチの作成元のブランチ (例: main) を選択します。
- ローカル リポジトリ内のいずれかのファイルを少し変更し、ファイルを保存します。 たとえば、
tests/transforms_test.pyファイル内のコード コメントを少し変更します。 - [ソース管理] ビューで、もう一度 […] ([ビューと他のアクション]) アイコンをクリックします。
- [変更] > [すべての変更をステージする] の順にクリックします。
- もう一度 […] ([ビューと他のアクション]) アイコンをクリックします。
- [コミット] > [ステージング済みをコミット] の順にクリックします。
- コミットのメッセージを入力します。
- もう一度 […] ([ビューと他のアクション]) アイコンをクリックします。
- [ブランチ] > [ブランチの公開] の順にクリックします。
手順 4: pull request を作成してマージする
- 公開したリポジトリ
https://github/<your-GitHub-username>/ide-best-practicesの GitHub Web サイトに移動します。 - [Pull requests] タブで、my-branch had recent pushes の横の [比較 & pull request] をクリックします。
- [Pull request の作成] をクリックします。
- pull request ページで、CI pipleline/ci-pipeline (push) の横にあるアイコンが緑色のチェック マークに変わるまで待ちます。 (アイコンが表示されるまでに数分かかる場合があります)。緑色のチェック マークではなく赤い X がある場合は、[詳細] をクリックして理由を確認します。 アイコンまたは [詳細] が表示されなくなった場合は、[すべてのチェックを表示] をクリックします。
- 緑色のチェック マークが表示されたら、
mainをクリックして、pull request を ブランチにマージします。