このチュートリアルでは、Databricks アセット バンドルを最初から作成します。 このシンプルなバンドルは、2 つのノートブックと、これらのノートブックを実行するための Azure Databricks ジョブの定義で構成されます。 次に、お使いの Azure Databricks ワークスペースでジョブを検証、デプロイ、実行します。 これらの手順では、「 Lakeflow ジョブを使用して最初のワークフローを作成する」というクイック スタートを自動化します。
要件
- Databricks CLI バージョン 0.218.0 以降。 インストールされている Databricks CLI のバージョンを確認するには、
databricks -vコマンドを実行します。 Databricks CLI のインストールについては、「Databricks CLI のインストールまたは更新」をご覧ください。 - Databricks CLI 用に構成された認証。 U2M 認証は、これらの手順をリアルタイムで試す場合に適しています。 「Databricks CLI の認証」を参照してください。
- リモート Databricks ワークスペースでワークスペース ファイルが有効になっている必要があります。 「ワークスペース ファイルとは」をご覧ください。
手順 1: バンドルを作成する
バンドルには、デプロイする成果物と、実行するリソースの設定が含まれます。
- お使いの開発マシン上で空のディレクトリを作成するか指定します。
- ターミナル内の空のディレクトリに切り替えるか、IDE で空のディレクトリを開きます。
ヒント
Git プロバイダーからクローンされたリポジトリを含むディレクトリを使用することもできます。 これにより、外部のバージョン コントロールでバンドルを管理し、プロジェクトで他の開発者や IT プロフェッショナルとより簡単に共同作業できるようになります。
このデモのリポジトリをクローンすることを選択する場合、Databricks では、リポジトリが空であるか、README や .gitignore などの基本ファイルのみを含めることを推奨しています。 そうしないと、リポジトリ内の既存のファイルが Azure Databricks ワークスペースに意図せず同期される可能性があります。
手順 2: プロジェクトにノートブックを追加する
この手順では、お使いのワークスペースにノートブックを 2 つ追加します。 最初のノートブックは、ニューヨーク州保健省のパブリック データ ソースから、2007 年以降の注目の赤ちゃんの名前の一覧を取得します。 「部門のウェブサイトで 赤ちゃんの名前:2007年からの名前別トレンド を参照してください。」 最初のノートブックでは、my-volume というカタログ内の default というスキーマにある main という Azure Databricks Unity Catalog ボリュームにこのデータを保存します。 2 つ目のノートブックでは、保存済みデータに対してクエリを実行し、2014 年の赤ちゃんの名前の集計数を名前と性別ごとに表示します。
ディレクトリのルートから、最初のノートブック (
retrieve-baby-names.pyという名前のファイル) を作成します。次のコードを
retrieve-baby-names.pyファイルに追加します。# Databricks notebook source import requests response = requests.get('http://health.data.ny.gov/api/views/jxy9-yhdk/rows.csv') csvfile = response.content.decode('utf-8') dbutils.fs.put("/Volumes/main/default/my-volume/babynames.csv", csvfile, True)2 つ目のノートブック (
filter-baby-names.pyというファイル) を同じディレクトリに作成します。次のコードを
filter-baby-names.pyファイルに追加します。# Databricks notebook source babynames = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/Volumes/main/default/my-volume/babynames.csv") babynames.createOrReplaceTempView("babynames_table") years = spark.sql("select distinct(Year) from babynames_table").toPandas()['Year'].tolist() years.sort() dbutils.widgets.dropdown("year", "2014", [str(x) for x in years]) display(babynames.filter(babynames.Year == dbutils.widgets.get("year")))
手順 3: バンドル構成スキーマ ファイルをプロジェクトに追加する
YAML ファイルと JSON スキーマ ファイルをサポートする Visual Studio Code、PyCharm Professional、IntelliJ IDEA Ultimate などの IDE を使用している場合は、IDE を使用して、バンドル構成スキーマ ファイルを作成するだけでなく、プロジェクトのバンドル構成ファイルの構文と書式設定を確認できます。
Visual Studio Code
Visual Studio Code Marketplace から YAML 拡張機能をインストールするなどして、Visual Studio Code に YAML 言語サーバーのサポートを追加します。
Databricks CLI を使用して
bundle schemaコマンドを実行し、出力を JSON ファイルにリダイレクトして、Databricks アセット バンドル構成 JSON スキーマ ファイルを生成します。 たとえば、次のように、現在のディレクトリにbundle_config_schema.jsonというファイルを生成します。databricks bundle schema > bundle_config_schema.json手順 4 では、バンドル構成ファイルの先頭に次のコメントを追加します。バンドル構成ファイルは、指定した JSON スキーマ ファイルに関連付けられます。
# yaml-language-server: $schema=bundle_config_schema.json注
前のコメントで、Databricks アセット バンドル構成 JSON スキーマ ファイルが別のパスにある場合は、
bundle_config_schema.jsonをスキーマ ファイルへの完全パスに置き換えます。
PyCharm Professional
Databricks CLI を使用して
bundle schemaコマンドを実行し、出力を JSON ファイルにリダイレクトして、Databricks アセット バンドル構成 JSON スキーマ ファイルを生成します。 たとえば、次のように、現在のディレクトリにbundle_config_schema.jsonというファイルを生成します。databricks bundle schema > bundle_config_schema.jsonバンドル構成 JSON スキーマ ファイルが認識されるように PyCharm を構成し、「カスタム JSON スキーマを構成する」の手順に従って、JSON スキーマ マッピングを完成させます。
手順 4 では、PyCharm を使用してバンドル構成ファイルを作成または開きます。 通常、このファイルの名前は
databricks.ymlです。
IntelliJ IDEA Ultimate
Databricks CLI を使用して
bundle schemaコマンドを実行し、出力を JSON ファイルにリダイレクトして、Databricks アセット バンドル構成 JSON スキーマ ファイルを生成します。 たとえば、次のように、現在のディレクトリにbundle_config_schema.jsonというファイルを生成します。databricks bundle schema > bundle_config_schema.jsonバンドル構成 JSON スキーマ ファイルが認識されるように IntelliJ IDEA を構成し、「カスタム JSON スキーマを構成する」の手順に従って、JSON スキーマ マッピングを完成させます。
手順 4 では、IntelliJ IDEA を使用して、バンドル構成ファイルを作成または開きます。 通常、このファイルの名前は
databricks.ymlです。
手順 4: バンドル構成ファイルをプロジェクトに追加する
この手順では、2 つのノートブックをデプロイして実行する方法を定義します。 このデモでは、Azure Databricks ジョブを使用して、1 つ目のノートブック、2 つ目のノートブックの順に実行します。 1 つ目のノートブックでデータを保存し、2 つ目のノートブックで保存済みデータに対してクエリを実行するため、1 つ目のノートブックの実行が完了してから、2 つ目のノートブックが開始されるようにします。 これらの目標をプロジェクトのバンドル構成ファイル内にモデル化します。
- ディレクトリのルートから、バンドル構成ファイル (
databricks.ymlという名前のファイル) を作成します。 -
databricks.ymlファイルに次のコードを追加し、<workspace-url>を、ワークスペースごとの URL (例:https://adb-1234567890123456.7.azuredatabricks.net) に置き換えます。 この URL は、.databrickscfgファイル内のものと一致する必要があります。
ヒント
# yaml-language-server から始まる 1 行目は、IDE でサポートされている場合にのみ必要です。 詳細については、「手順 3」を参照してください。
# yaml-language-server: $schema=bundle_config_schema.json
bundle:
name: baby-names
resources:
jobs:
retrieve-filter-baby-names-job:
name: retrieve-filter-baby-names-job
job_clusters:
- job_cluster_key: common-cluster
new_cluster:
spark_version: 12.2.x-scala2.12
node_type_id: Standard_DS3_v2
num_workers: 1
tasks:
- task_key: retrieve-baby-names-task
job_cluster_key: common-cluster
notebook_task:
notebook_path: ./retrieve-baby-names.py
- task_key: filter-baby-names-task
depends_on:
- task_key: retrieve-baby-names-task
job_cluster_key: common-cluster
notebook_task:
notebook_path: ./filter-baby-names.py
targets:
development:
workspace:
host: <workspace-url>
ジョブをカスタマイズする場合、ジョブ宣言内のマッピングは、REST API リファレンスの POST /api/2.1/jobs/create に記載されているジョブ作成操作の要求ペイロード (YAML 形式) に対応しています。
ヒント
「ターゲット設定でオーバーライドする」で説明されている手法を使用して、バンドル内の新しいジョブ クラスターの設定を定義、結合、オーバーライドできます。
手順 5: プロジェクトのバンドル構成ファイルを検証する
この手順では、バンドルの構成が有効かどうかを確認します。
Databricks CLI を使用して、次のように
bundle validateコマンドを実行します。databricks bundle validateバンドル構成の概要が返されたら、検証は成功しています。 エラーが返される場合は、エラーを修正してから、この手順を繰り返します。
この手順の後でバンドルを変更した場合は、この手順を繰り返して、バンドルの構成がまだ有効かどうかを確認する必要があります。
手順 6: ローカル プロジェクトをリモート ワークスペースにデプロイする
この手順では、リモートの Azure Databricks ワークスペースに 2 つのローカル ノートブックをデプロイし、ワークスペース内に Azure Databricks ジョブを作成します。
Databricks CLI を使用して、次のように
bundle deployコマンドを実行します。databricks bundle deploy -t development2 つのローカル ノートブックがデプロイされているかどうかを確認します。Azure Databricks ワークスペースのサイドバーで、[ ワークスペース] をクリックします。
Users >
<your-username>> .bundle > baby-names > development > files フォルダーをクリックします。 このフォルダーには 2 つのノートブックが格納されているはずです。ジョブが作成されたかどうかを確認します。Azure Databricks ワークスペースのサイドバーで、[ ジョブ] と [パイプライン] をクリックします。
必要に応じて、ジョブ と 私が所有 フィルターを選択します。
[retrieve-filter-baby-names-job] をクリックします。
[タスク] タブをクリックします。retrieve-baby-names-task と filter-baby-names-task という 2 つのタスクがあるはずです。
この手順の後でバンドルを変更した場合は、手順 6 と 7 を繰り返して、バンドルの構成がまだ有効かどうかを確認してから、プロジェクトを再デプロイする必要があります。
手順 7: デプロイされたプロジェクトを実行する
この手順では、ワークスペースで Azure Databricks ジョブを実行します。
Databricks CLI を使用して、次のように
bundle runコマンドを実行します。databricks bundle run -t development retrieve-filter-baby-names-jobターミナルに表示される
Run URLの値をコピーし、この値を Web ブラウザーに貼り付けて Azure Databricks ワークスペースを開きます。Azure Databricks ワークスペースで、2 つのタスクが正常に完了し、緑色のタイトル バーが表示されたら、filter-baby-names-task タスクをクリックしてクエリ結果を表示します。
この手順の後でバンドルを変更した場合は、手順 6 から 8 を繰り返し、バンドルの構成がまだ有効かどうかを確認して、プロジェクトを再デプロイし、再デプロイされたプロジェクトを実行する必要があります。
手順 8: クリーンアップ
この手順では、デプロイされた 2 つのノートブックとジョブをワークスペースから削除します。
Databricks CLI を使用して、次のように
bundle destroyコマンドを実行します。databricks bundle destroyジョブの削除要求を確認します。リソースを完全に破棄するように求められたら、「
y」と入力し、Enterキーを押します。ノートブックの削除要求を確認します。以前にデプロイしたフォルダーとそのすべてのファイルを完全に破棄するように求められたら、「
y」と入力し、Enterキーを押します。
bundle destroy コマンドを実行すると、デプロイされたジョブと、デプロイされた 2 つのノートブックを含むフォルダーのみが削除されます。 このコマンドを実行しても、1 つ目のノートブックによって作成された babynames.csv ファイルなど、副作用として生成されたものは削除されません。
babybnames.csv ファイルを削除するには、次の操作を行います。
- Azure Databricks ワークスペースのサイドバーにある [カタログ] をクリックします。
- [DBFS を参照] をクリックします。
- FileStore フォルダーをクリックします。
- babynames.csv の横にあるドロップダウン矢印をクリックし、[削除] クリックします。
- 開発用マシンからもバンドルを削除する場合は、「手順 1」のローカル ディレクトリを削除できます。