Python用Databricks Connectを活用したDatabricksユーティリティ

手記

この記事では、Databricks Runtime 13.3 LTS 以降の Databricks Connect について説明します。

この記事では、Databricks Connect for Python で Databricks Utilities を使用する方法について説明します。 Databricks Connect を使用すると、一般的な IDE、ノートブック サーバー、カスタム アプリケーションをAzure Databricks クラスターに接続できます。 「Databricks Connect」を参照してください。

Databricks Connect を使い始める前に、Databricks Connect クライアントを設定する必要があります。

この記事の Scala バージョンについては、「Databricks Utilities with Databricks Connect for Scala」を参照してください。

使用可能な Databricks ユーティリティ

Databricks Connect を使用して、次のように Databricks Utilities にアクセスします。

  • Databricks Utilities にアクセスするには、 WorkspaceClient クラスの dbutils 変数を使用します。 WorkspaceClient クラスは Databricks SDK for Python に属し、Databricks Connect に含まれています。
  • dbutils.fs を使用して、Databricks Utilities fs ユーティリティにアクセスします。
  • dbutils.secrets を使用して、Databricks Utilities シークレット ユーティリティにアクセスします。
  • dbutils.widgetsを使ってローカルウィジェットを作成・読み込み、Databricks Utilities Widgetsユーティリティ用に書かれたコードをローカルで実行できるようにします。 これらのウィジェットはローカルセッションにのみ存在し、リモートノートブックやジョブタスクのパラメータを取得することはできません。 ローカルで作成していないウィジェットを読むとKeyErrorが発生し、getArgumentを使う場合はデフォルト値が返されます。
  • dbutils.jobs.taskValuesを使って、Databricks Utilities の jobs ユーティリティ用に書かれたコードをローカルでデバッグしてください。 タスク値はリモートジョブ実行では交換されません。setは何もせず、getはdebugValue引数の値を返すか、debugValueを渡さないとエラーになります。 下流タスクのタスク値を設定したり取得したりするには、コードをジョブタスクとして実行してください。

dbutilsでは、前述のユーティリティ以外のDatabricksユーティリティ機能は利用できません。

ヒント

また、付属の Databricks SDK for Pythonを使用して、前述の Databricks Utilities API だけでなく、使用可能な Databricks REST API にアクセスすることもできます。 PyPI databricks-sdk を参照してください。

WorkspaceClient を初期化する

WorkspaceClientを初期化するには、ワークスペースで Databricks SDK を認証するのに十分な情報を提供する必要があります。 たとえば、次のことができます。

  • ワークスペースの URL とアクセス トークンをコード内で直接ハードコーディングし、次のように WorkspaceClient 初期化します。 このオプションはサポートされていますが、Databricks では、コードがバージョン 管理にチェックインされている場合や共有されている場合に、アクセス トークンなどの機密情報が公開される可能性があるため、このオプションを することはお勧めしません。

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient(host  = f"https://{retrieve_workspace_instance_name()}",
                        token = retrieve_token())
    
  • および hostフィールドを含む token を作成または指定し、次のように WorkspaceClient を初期化します。

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient(profile = "<profile-name>")
    
  • 環境変数を Databricks Connect に設定するのと同じ方法で DATABRICKS_HOST および DATABRICKS_TOKEN を設定し、次のように WorkspaceClient 初期化します。

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient()
    

Databricks SDK for Pythonは、Databricks Connect の SPARK_REMOTE 環境変数を認識しません。

Databricks SDK for Pythonの追加のAzure Databricks認証オプションと、ワークスペース レベルではなくアカウント レベルで使用可能な Databricks REST API にアクセスするために Databricks SDK 内で AccountClient を初期化する方法については、PyPI のdatabricks-sdk を参照してください。

例: ボリュームにファイルを作成する

次の例は、Databricks SDK for Pythonを使用して Databricks Utilities を自動化する方法を示しています。 次の使用例は、ワークスペース内の Unity カタログ ボリュームのパスに zzz_hello.txt という名前のファイルを作成し、ファイルからデータを読み取って、ファイルを削除します。 この例では、環境変数 DATABRICKS_HOST と DATABRICKS_TOKEN が既に設定されていることを前提としています。

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

file_path = "/Volumes/main/default/my-volume/zzz_hello.txt"
file_data = "Hello, Databricks!"
fs = w.dbutils.fs

fs.put(
  file      = file_path,
  contents  = file_data,
  overwrite = True
)

print(fs.head(file_path))

fs.rm(file_path)

Databricks SDK の Python ドキュメント内のdbutilsとの対話 に関する項目も参照してください。