Visual Studio Code で dbx を使用する
このドキュメントは廃止されており、更新されない可能性があります。
Databricks では、Databricks Labs が dbx
する代わりに、Databricks アセット バンドルを使用することをお勧めします。 「Databricks アセットバンドルとは」および「dbx からバンドルへの移行」を参照してください。
Visual Studio Code で Databricks を使用するには、「 Visual Studio Code の Databricks 拡張機能」の記事を参照してください。
この記事では、Python 互換の任意の IDE で操作できる Python ベースの コード サンプル について説明します。 具体的には、この記事では、次の開発者の生産性機能を提供する Visual Studio Code でこのコード サンプルを操作する方法について説明します。
この記事では、 Databricks Labs の dbx と Visual Studio Code を使用して、コード サンプルをリモート Databricks ワークスペースに送信します。は、dbx
Databricksジョブを使用してオーケストレーションDatabricksを行い、送信されたコードをそのワークスペース内の ジョブ クラスタリング で実行するようにDatabricksに指示します。
一般的なサードパーティ 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 と共に使用する方法について説明します。
コード サンプルの要件
このコード サンプルを使用するには、次のものが必要です。
- Databricks アカウント内の Databricks ワークスペース。
- GitHub アカウント。 GitHub アカウントをまだお持ちでない場合は、作成します。
さらに、ローカル開発マシンには、次のものが必要です。
-
Python:バージョン3.8以降
ターゲットクラスターにインストールされているバージョンと一致するバージョンの Python を使用する必要があります。 既存のクラスターにインストールされている Python のバージョンを取得するには、クラスターの Webターミナル を使用して
python --version
コマンドを実行します。 Databricks Runtimeリリースノートバージョンの「システム環境」セクションと、ターゲットクラスターのDatabricks Runtimeバージョンの互換性も参照してください。いずれにせよ、Pythonのバージョンは3.8以上である必要があります。ローカル マシンで現在参照されている Python のバージョンを取得するには、ローカル ターミナルから
python --version
を実行します。 (ローカルマシンでPythonを設定する方法によっては、この記事全体でpython
ではなくpython3
を実行する必要がある場合があります。Python インタープリターの選択も参照してください。 -
ピップ。
pip
は、新しいバージョンの Python と共に自動的にインストールされます。pip
がすでにインストールされているかどうかを確認するには、ローカル ターミナルからpip --version
を実行します。(ローカル コンピューターで Python またはpip
を設定する方法によっては、この記事全体でpip
ではなくpip3
を実行する必要がある場合があります。 -
dbx バージョン 0.8.0 以降。 Python Package Index (PyPI) から
dbx
パッケージをインストールするには、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 のデータ ブリック/ide ベスト プラクティス Repo ジトリで入手でき、次のことを行います。
- GitHub の owid/covid-19-data Repo ジトリからデータを取得します。
- 特定の ISO 国コードのデータをフィルタリングします。
- データからピボット テーブルを作成します。
- データに対してデータクレンジングを実行します。
- コード ロジックを再利用可能な関数にモジュール化します。
- ユニットは関数をテストします。
- コードがリモート Databricks ワークスペースの Delta テーブルにデータを書き込むことができるように、
dbx
プロジェクト構成と設定を提供します。
コード サンプルを設定する
このコード サンプル の要件 が満たされたら、次の手順を完了してコード サンプルの使用を開始します。
これらの手順には、このコード サンプルを CI/CD 用に設定することは含まれていません。 このコード サンプルを実行するために CI/CD を設定する必要はありません。 CI/CD を後で設定する場合は、「 GitHub Actions での実行」を参照してください。
ステップ 1: Python 仮想環境を作成する
-
ターミナルから、このコード サンプルの仮想環境を格納する空白のフォルダーを作成します。 これらの手順では、
ide-demo
という名前の親フォルダを使用します。 このフォルダには任意の名前を付けることができます。 別の名前を使用する場合は、この記事全体で名前を置き換えてください。 フォルダーを作成したら、そのフォルダーに切り替えて、そのフォルダーから Visual Studio Code を起動します。code
コマンドの後にドット(.
)を必ず含めてください。LinuxまたはmacOSの場合:
Bashmkdir 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
)Bashpipenv --python <version>
次のステップで必要になるため、
pipenv
コマンドの出力にあるVirtualenv location
の値をメモしておきます。 -
ターゲットのPythonインタープリターを選択し、Python仮想環境をアクティブ化します。
-
メニューバーで [表示] > [コマンドパレット] をクリックし、
Python: Select
と入力して [Python:インタープリターの選択] をクリックします。 -
作成したばかりのPython仮想環境へのパス内でPythonインタープリターを選択します。(このパスは、
pipenv
コマンドの出力にVirtualenv location
値としてリストされます。) -
メニューバーで、 [ビュー] > [コマンドパレット] をクリックし、
Terminal: Create
と入力して [ターミナル:新しいターミナルの作成] をクリックします。 -
コマンド プロンプトに、
pipenv
シェルにいることが示されていることを確認します。 確認のために、コマンドプロンプトの前に(<your-username>)
のようなものが表示されます。 表示されない場合は、次のコマンドを実行します。Bashpipenv shell
pipenv
シェルを終了するには、コマンド をexit
実行すると、括弧が消えます。
詳しくはVisual Studio Codeドキュメントの「VS CodeにおけるPython環境の使用」を参照してください。
-
ステップ 2: GitHub からコード サンプルを複製する
- Visual Studio Code で、
ide-demo
フォルダー ( [ファイル] > [フォルダーを開く ]) を開きます (まだ開いていない場合)。 - [ 表示] > [コマンド パレット] をクリックし、「
Git: Clone
」と入力して、[ Git: Clone ] をクリックします。 - [リポジトリ URL を指定するか、リポジトリ ソースを選択する ] に、次のように入力します。
https://github.com/databricks/ide-best-practices
ide-demo
フォルダを参照し、[ リポジトリの場所を選択 ]をクリックします。
手順 3: コード サンプルの依存関係をインストールする
-
お使いの Python のバージョンと互換性のある
dbx
および Databricks CLI バージョン 0.18 以下のバージョンをインストールします。 これを行うには、Visual Studio Codeで、ターミナルから、pipenv
シェルがアクティブ化されたide-demo
フォルダー(pipenv shell
)から、次のコマンドを実行します。Bashpip install dbx
-
dbx
がインストールされていることを確認します。これを行うには、次のコマンドを実行します。Bashdbx --version
バージョン番号が返された場合は、
dbx
がインストールされています。バージョン番号が0.8.0未満の場合は、次のコマンドを実行して
dbx
をアップグレードし、バージョン番号を再度確認します。Bashpip install dbx --upgrade
dbx --version
# Or ...
python -m pip install dbx --upgrade
dbx --version -
dbx
をインストールすると、従来の Databricks CLI (Databricks CLI バージョン 0.17) も自動的にインストールされます。従来の Databricks CLI (Databricks CLI バージョン 0.17) がインストールされていることを確認するには、次のコマンドを実行します。Bashdatabricks --version
Databricks CLI バージョン 0.17 が返された場合は、従来の Databricks CLI がインストールされます。
-
従来の Databricks CLI (Databricks CLI バージョン 0.17) を 認証で設定していない場合は、ここで設定する必要があります。 認証が設定されていることを確認するには、次の基本コマンドを実行して、Databricks ワークスペースに関する概要情報を取得します。
ls
サブコマンドの後にスラッシュ (/
) を必ず含めてください。Bashdatabricks workspace ls /
ワークスペースのルートレベルのフォルダー名のリストが返された場合は、認証が設定されます。
-
このコード サンプルが依存する Python パッケージをインストールします。 これを行うには、
ide-demo/ide-best-practices
フォルダーから次のコマンドを実行します。Bashpip install -r unit-requirements.txt
-
コード サンプルの依存パッケージがインストールされていることを確認します。 これを行うには、次のコマンドを実行します。
Bashpip list
requirements.txt
ファイルとunit-requirements.txt
ファイルにリストされているパッケージがこのリストのどこかにある場合は、従属パッケージがインストールされます。
requirements.txt
に記載されているファイルは、特定のパッケージバージョン用です。互換性を高めるために、これらのバージョンを、Databricksワークスペースが後でデプロイを実行するために使用する クラスターノードタイプ と相互参照できます。クラスターの バージョンについてはDatabricks Runtime Databricks Runtime、リリースノートのバージョンと互換性 の「システム環境」セクションを参照してください 。
手順 4: Databricks ワークスペースのコード サンプルをカスタマイズする
-
リポジトリの
dbx
プロジェクト設定をカスタマイズします。 これを行うには、.dbx/project.json
ファイルで、profile
オブジェクトの値をDEFAULT
から、従来の Databricks CLI (Databricks CLI バージョン 0.17) で認証用に設定したプロファイルの名前に変更します。 デフォルト以外のプロファイルを設定しなかった場合は、DEFAULT
そのままにしておきます。 例えば:JSON{
"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
Databricksこれを行うには、 Databricksファイルで、 オブジェクトと オブジェクトの値を と から、 ワークスペースがデプロイの実行に使用する ランタイム バージョン文字列 と クラスター ノード タイプ に変更します。たとえば、Databricks Runtime 10.4 LTS と
i3.xlarge
ノードの種類を指定するには、次のようにします。YAMLenvironments:
default:
workflows:
- name: 'covid_analysis_etl_integ'
new_cluster:
spark_version: '10.4.x-scala2.12'
num_workers: 1
node_type_id: 'i3.xlarge'
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: 'i3.xlarge'
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: 'i3.xlarge'
spark_python_task:
python_file: 'file://jobs/covid_trends_job_raw.py'
この例では、これら 3 つのジョブ定義のそれぞれに同じ spark_version
と node_type_id
値があります。 ジョブ定義ごとに異なる値を使用できます。 また、共有値を作成し、ジョブ定義間で再利用することで、入力エラーやコードのメンテナンスを減らすこともできます。 dbx
ドキュメントの YAML の例を参照してください。
コード サンプルを調べる
コード サンプルを設定したら、次の情報を使用して、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
のドキュメントの「pytest.ini と構成オプション」を参照してください。
.coveragerc
ファイルには、coverage.py を使用したPythonコードカバレッジ測定の構成オプションが含まれています。coverage.py
ドキュメントの「設定リファレンス」を参照してください。
requirements.txt
ファイルは、以前に pip
で実行した unit-requirements.txt
ファイルのサブセットであり、ユニット・テストも依存するパッケージのリストが含まれています。
包装
setup.py
ファイルは、pip
Pythonsetuptools を使用して プロジェクトをパッケージ化するための コマンドなどのコンソールで実行されるコマンド (コンソールスクリプト) を提供します。setuptools
のドキュメントの「エントリ ポイント」を参照してください。
その他のファイル
このコード サンプルには、以前に説明されていない他のファイルがあります。
.github/workflows
フォルダには、GitHub Actions を表すdatabricks_pull_request_tests.yml
、onpush.yml
、onrelease.yaml
の 3 つのファイルが含まれています。これらについては、後述の「GitHub Actions 」セクションで説明します。.gitignore
ファイルには、リポジトリに対して Git が無視するローカル フォルダーとファイルの一覧が含まれています。
コード サンプルを実行する
ローカル コンピューターで dbx
を使用して、次のサブセクションで説明するように、リモート ワークスペースでコード サンプルをオンデマンドで実行するように Databricks に指示できます。 または、 GitHub Actions を使用して 、コードの変更を GitHub リポジトリにプッシュするたびに GitHub でコード サンプルを実行することもできます。
dbx で実行
-
covid_analysis
フォルダーの内容を Pythonsetuptools
開発モードでパッケージとしてインストールするには、dbx
プロジェクトのルート (ide-demo/ide-best-practices
フォルダーなど) から次のコマンドを実行します。このコマンドの最後にドット (.
) を必ず含めてください。Bashpip install -e .
このコマンドは、
covid_analysis/__init__.py
ファイルとcovid_analysis/transforms.py
ファイルのコンパイル済みバージョンに関する情報を含むcovid_analysis.egg-info
フォルダーを作成します。 -
次のコマンドを実行して、テストを実行します。
Bashpytest tests/
テストの結果はターミナルに表示されます。 4 つのテストすべてが合格と表示されます。
R ノートブックと Scala ノートブックのテストなど、テストのその他の方法については、「 ノートブックの単体テスト」を参照してください。
-
必要に応じて、次のコマンドを実行して、テストの test coverage メトリクスを取得します。
Bashcoverage run -m pytest tests/
coverage
見つからないというメッセージが表示された場合は、 pip install coverage
を実行してから、もう一度やり直してください。
テスト カバレッジの結果を表示するには、次のコマンドを実行します。
coverage report -m
-
4 つのテストすべてに合格した場合は、次のコマンドを実行して、
dbx
プロジェクトの内容を Databricks ワークスペースに送信します。Bashdbx deploy --environment=default
プロジェクトとその実行に関する情報は、
.dbx/project.json
ファイル内のworkspace_directory
オブジェクトで指定された場所に送信されます。プロジェクトのコンテンツは、
.dbx/project.json
ファイル内のartifact_location
オブジェクトで指定された場所に送信されます。 -
ワークスペース内の本番運用前のバージョンのコードを実行するには、次のコマンドを実行します。
Bashdbx launch covid_analysis_etl_integ
実行の結果へのリンクがターミナルに表示されます。 次のようになります。
Bashhttps://<your-workspace-instance-id>/?o=1234567890123456#job/123456789012345/run/12345
Web ブラウザーでこのリンクをたどると、ワークスペースで実行の結果が表示されます。
-
ワークスペース内のコードの本番運用バージョンを実行するには、次のコマンドを実行します。
Bashdbx launch covid_analysis_etl_prod
実行の結果へのリンクがターミナルに表示されます。 次のようになります。
Bashhttps://<your-workspace-instance-id>/?o=1234567890123456#job/123456789012345/run/23456
Web ブラウザーでこのリンクをたどると、ワークスペースで実行の結果が表示されます。
GitHub Actions での実行
プロジェクトの .github/workflows
フォルダーでは、 onpush.yml
ファイルと onrelease.yml
GitHub Actions ファイルによって次の処理が行われます。
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 を使用するように設定する
Databricksワークスペースを設定するには、「サービスプリンシパル for CI/CD」の手順に従います。これには、次のアクションが含まれます。
- Databricks サービスプリンシパルを作成します。
- Databricks サービスプリンシパルの Databricks アクセス トークンを作成します。
セキュリティのベスト プラクティスとして、 では、 が ワークスペースで認証できるようにするために、ワークスペースDatabricks ユーザーの 個人用アクセス トークンではなく、DatabricksDatabricks サービス プリンシパルの 2 アクセス トークンを使用することをお勧めします。DatabricksGitHubDatabricks
Databricks サービスプリンシパルとそのDatabricks アクセス トークンを作成したら、次のセクションで使用する Databricks アクセス トークンの値を停止してメモします。
GitHub Actions を実行する
手順 1: クローン作成されたリポジトリを発行する
- Visual Studio Code のサイドバーで、 GitHub アイコンをクリックします。 アイコンが表示されない場合は、最初に [拡張機能 ] ビュー ( [>拡張機能の表示 ]) で GitHub Pull Requests and Issues 拡張機能を有効にします。
- [サインイン ] ボタンが表示されている場合は、それをクリックし、画面の指示に従って GitHub アカウントにサインインします。
- メニュー バーで、[表示] > [コマンド パレット ] をクリックし、「
Publish to GitHub
」と入力して、[ GitHub に発行] をクリックします。 - 複製された Repo ジトリを GitHub アカウントに発行するオプションを選択します。
手順 2: 暗号化されたシークレットをリポジトリに追加する
公開したリポジトリの GitHub Web サイトで、次の暗号化されたシークレットについて、「 リポジトリの暗号化されたシークレットを作成する」の手順に従います。
DATABRICKS_HOST
という名前の暗号化されたシークレットを作成し、ワークスペース インスタンスの URL の値 (https://dbc-a1b2345c-d6e7.cloud.databricks.com
など) に設定します。DATABRICKS_TOKEN
という名前の暗号化されたシークレットを作成し、DatabricksサービスプリンシパルのDatabricksアクセストークンの値に設定します。
手順 3: ブランチを作成してリポジトリに発行する
- Visual Studio Code の [ソース管理 ] ビュー ( [表示] > [ソース管理 ]) で、 [...] ( [ビューとその他のアクション ]) アイコンをクリックします。
- 「ブランチ」>「ブランチの作成元 」をクリックします。
- ブランチの名前を入力します (例:
my-branch
)。 - ブランチを作成するブランチ ( main など) を選択します。
- ローカル リポジトリ内のファイルの 1 つに小さな変更を加え、ファイルを保存します。 たとえば、
tests/transforms_test.py
ファイル内のコード コメントに小さな変更を加えます。 - [ソース管理 ] ビューで、 [...] ( [ビューとその他のアクション ]) アイコンをもう一度クリックします。
- [ 変更] をクリックして>すべての変更をステージングします 。
- [...] ( [ビューとその他のアクション ]) アイコンをもう一度クリックします。
- 「コミット」>「コミット・ステージング」 をクリックします。
- コミットのメッセージを入力します。
- [...] ( [ビューとその他のアクション ]) アイコンをもう一度クリックします。
- 「ブランチ」>「ブランチの公開 」をクリックします。
ステップ 4: pull request を作成してマージする
- 公開したリポジトリの GitHub Web サイト (
https://github/<your-GitHub-username>/ide-best-practices
) に移動します。 - [Pull requests ] タブで、[ my-branch had recent pushes ] の横にある [Compare & pull request ] をクリックします。
- [プルリクエストの作成 ] をクリックします。
- pull request ページで、 CI pipleline/ci-パイプライン (push) の横にあるアイコンに緑色のチェック マークが表示されるのを待ちます。 (アイコンが表示されるまでに数分かかる場合があります。 緑色のチェックマークではなく赤色の X マークが付いている場合は、[ 詳細 ] をクリックして理由を確認します。 アイコンまたは 詳細 が表示されなくなった場合は、[ すべてのチェックを表示] をクリックします。
- 緑色のチェック マークが表示された場合は、 [pull request のマージ] をクリックして、pull request を
main
ブランチにマージします。