🏭

Azure Data FactoryでDatabricksのコードを自動更新

2024/01/21に公開

概要

Azure Data Factory(ADF)を活用して、「データの前処理->予測->後処理」を自動化するパイプラインを構築するケースを考えます。予測は、ADFのDatabricks Notebookアクティビティ使用して、Databricks Notebookを実行します。このようなシナリオでは、Notebookや関連モジュールをGitリポジトリでバージョン管理し、Databricks Repos[1]にクローンして利用することがあります。

しかし、リモートリポジトリに加えられた変更をDatabricks Reposに反映するには、Databricks上でGUI操作[2]によるPullが必要となるため、いくつかの課題が生じます。

  • 課題1: 手間と時間の増大
    リモートリポジトリに変更が発生するたびに、パイプライン実行前に手動でPull操作を行う必要があり、開発者の負担が増加します。
  • 課題2: 古いコードでの実行リスク
    Pull操作を忘れずに実行しないと、古いコードを使用して予測処理が実行されてしまう可能性があります。その結果、予測結果の精度が低下したり、再実行が必要になるなど、無駄な時間と労力を費やすことになりかねません。

本記事では、これらの課題を解決し、常に最新のコードで予測処理を実行する方法を紹介します。

方法

リモートリポジトリの変更点をDatabricks Reposに自動的にPullするアクティビティをADFで作成します。具体的には、ADFの「Webアクティビティ」を使って、Databricks Repos API[3]にPatchリクエストを送信します。

1. パラメータの設定

ADFのパラメータを4つ設定しておきます。

databricks_url

DatabricksのURL
azure databricksの場合、https://hogehoge.azuredatabricks.net

databricks_repo_id

対象のDatabircksリポジトリのリポジトリID
確認方法
ワークスペース->Repos->対象リポジトリ名の横にあるブランチ名 をクリックし、以下の画面に遷移
赤枠の部分にリポジトリIDが表示

target_branch

対象のブランチ名

databricks_token

Databricksのアクセストークン
アクセストークンの作成はこちら

2. webアクティビティの設定

webアクティビティのURL、メソッド、本文、認証、ヘッダーを設定します。

URL

@concat(
    pipeline().parameters.databricks_url,
    '/api/2.0/repos/',
    pipeline().parameters.databricks_repo_id
)

メソッド

PATCH

本文

@concat(
    '{"branch": "',
    pipeline().parameters.target_branch,
    '"}'
)

認証

なし

ヘッダー

AcceptAuthorizationを設定します。

  • Accept
application/json
  • Authorization
    ベアラー認証を使います。
@concat(
    'Bearer ',
    pipeline().parameters.databricks_token
)

挙動

  • Databricks Reposのブランチが、ADFで指定したブランチと一致する場合
    リモートリポジトリの変更点がPullされ、Databricks Reposに反映されます。

  • Databricks Reposのブランチが、ADFで指定したブランチと異なる場合
    まず、指定されたブランチに自動的にチェックアウトされます。その後、リモートリポジトリの変更点がPullされ、Databricks Reposに反映されます。

まとめ

本記事では、ADFパイプラインにDatabricks Reposの自動Pullを組み込む方法を紹介しました。この仕組みにより、手動Pullの手間を削減し、常に最新のコードでDatabricks上のNotebookを実行することが可能になります。

脚注
  1. https://docs.databricks.com/ja/repos/index.html ↩︎

  2. https://docs.databricks.com/ja/repos/git-operations-with-repos.html ↩︎

  3. https://docs.databricks.com/api/workspace/repos ↩︎

Discussion