Databricks上でコードを実行し、計算環境を管理します。サーバレス・クラシック・インタラクティブ(対話的)など複数のクラスターを使用してPython、Scala、SQL、Rを実行できるほか、クラスター(計算資源の集合)やSQLウェアハウス(データ分析用の処理基盤)の作成、サイズ変更、削除も可能です。
Execute code and manage compute on Databricks: run Python/Scala/SQL/R via serverless, classic, or interactive clusters, and create/resize/delete clusters and SQL warehouses.
Databricks 上でコードを実行します。実行モードは3種類から選択してください。
以下の例はすべて Databricks CLI を使用します。インストールと認証については databricks-core スキルを参照してください。
| 観点 | Databricks Connect ⭐ | Serverless Job | Interactive Cluster |
|---|---|---|---|
| 用途 | Spark コード(ETL、データ生成) | 重い処理(ML) | ツール呼び出しをまたぐ状態保持、Scala/R |
| 起動 | 即時 | コールドスタート 約25〜50秒 | 停止中の場合 約5分 |
| 状態 | Python プロセス内 | なし | context_id 経由 |
| 言語 | Python(PySpark) | Python、SQL | Python、Scala、SQL、R |
| 依存関係 | withDependencies() |
environments spec を付けた CLI | クラスターへのインストール |
主な判断ポイント:
Declarative Automation Bundles(DABs)を使用している場合は、まず databricks-dabs スキル の手順に従ってください。
簡単に言うと、databricks bundle run を使って、ジョブ・パイプライン・その他のリソースに紐付いたコードを実行できます。
プロジェクトルートに databricks.yml ファイルがあれば DABs を使用していると判断できます。
これらのリソースが存在しない場合、または DABs を使用していない場合は、以下の手順に進んでください。
Spark ベースのワークロードには Databricks Connect を優先し、次に Serverless を検討してください。
Spark ベースのコード? → Databricks Connect(最速)
└─ Python 3.12 が未インストール? → Python と databricks-connect をインストール
└─ インストール失敗? → ユーザーに確認(自動でモードを切り替えない)
重い処理・長時間実行(ML)? → Serverless Job(独立実行)
呼び出しをまたいで状態を保持したい? → Interactive Cluster(一覧を表示してどれを使うか確認)
Scala / R を使用? → Interactive Cluster(一覧を表示してどれを使うか確認)
選択したモードのリファレンスファイルを先に読んでから進めてください。
from databricks.connect import DatabricksSession
...
spark = DatabricksSession.builder.profile("my-local-profile").serverless(True).getOrCreate()
python my_spark_script.py
純粋な CLI フロー:ローカルファイルをワークスペースノートブックとしてアップロードし、
databricks jobs submit で1回限りの実行を起動(作成と実行を1コールで行う。エフェメラルなため Jobs UI には表示されず、リトライもない)、
その後ポーリングして結果を取得します。
ローカルファイルは Databricks ソースノートブック形式である必要があります。
先頭行に # Databricks notebook source(Python)または -- Databricks notebook source(SQL)が必要です。
1. ローカルファイルをワークスペースノートブックとしてアップロード。
TARGET_PATH は位置引数、--file はローカルパスを指定します。
databricks workspace import /Workspace/Users/<user>/.ai_dev_kit/train \
--file /local/path/to/train.py \
--format SOURCE \
--language PYTHON \
--overwrite
2. 実行をサブミット。
--no-wait を付けると {"run_id": N} が即座に返ります。省略すると終了までブロックします。
"client": "4" は必須です("1" では dependencies が指定されていても警告なしに無視されます)。
databricks jobs submit --no-wait --json @submit.json
{
"run_name": "train-run",
"tasks": [{
"task_key": "main",
"notebook_task": {"notebook_path": "/Workspace/Users/<user>/.ai_dev_kit/train"},
"environment_key": "ml_env"
}],
"environments": [{
"environment_key": "ml_env",
"spec": {"client": "4", "dependencies": ["scikit-learn==1.5.2", "mlflow==2.22.0"]}
}]
}
3. 状態の確認・完了待ち。
ライフサイクル:PENDING → RUNNING → TERMINATED(または SKIPPED / INTERNAL_ERROR)。
.state.result_state(SUCCESS / FAILED / CANCELED)はライフサイクルが TERMINATED になってから読んでください。
databricks jobs get-run <RUN_ID> | jq '{
state: .state.life_cycle_state,
result: .state.result_state,
duration_ms: .execution_duration,
url: .run_page_url,
task_run_id: .tasks[0].run_id
}'
4. 出力 / エラーの取得。
注意点: get-run-output が受け取るのはタスクの run_id(.tasks[0].run_id)であり、サブミット時の親 run_id ではありません。
notebook_output.result は dbutils.notebook.exit() に渡した文字列です。
databricks jobs get-run-output <TASK_RUN_ID> | jq '{result: .notebook_output.result, error, error_trace}'
ノートブック内では必ず dbutils.notebook.exit(<文字列>) を使用してください。
print() の出力は get-run-output では取得できません。
JSON 結果を返す場合:dbutils.notebook.exit(json.dumps({...})) とし、クライアント側で .notebook_output.result をパースします。
デフォルトでは使用しないこと。Serverless Job を優先してください。
次のような場合に使用:
Interactive Cluster は起動が遅く(3〜8分)、起動中はコストが発生します。 暗黙的に起動しないでください。
コンピュートのライフサイクルおよびコード実行に関する操作は、すべて Databricks CLI を通じて行います。
| アクション | コマンド |
|---|---|
| ローカルファイルをワークスペースノートブックとしてアップロード | databricks workspace import <WORKSPACE_PATH> --file <LOCAL> --format SOURCE --language PYTHON --overwrite |
| Serverless コードの実行(アップロード+サブミット+待機) | databricks jobs submit --json @submit.json(非同期の場合は --no-wait を付加。Serverless Job セクション参照) |
| 実行状態の取得・待機 | databricks jobs get-run <RUN_ID>(.state.life_cycle_state をポーリング) |
| 実行出力の取得 | databricks jobs get-run-output <TASK_RUN_ID> |
| クラスター一覧 | databricks clusters list --output json |
| クラスター詳細の取得 | databricks clusters get <CLUSTER_ID> |
| クラスターの起動 / 再起動 / 終了 | databricks clusters start/restart/delete <CLUSTER_ID> |
| クラスターの完全削除 | databricks clusters permanent-delete <CLUSTER_ID> |
| クラスターの作成 | databricks clusters create --json '{...}'(3-interactive-cluster.md 参照) |
| ノードタイプ / Spark バージョン一覧 | databricks clusters list-node-types / databricks clusters spark-versions |
| 起動中クラスターでのコード実行 | databricks api post /api/1.2/contexts/create + databricks api post /api/1.2/commands/execute(3-interactive-cluster.md 参照) |
| SQL ウェアハウス | databricks warehouses create/list/get/start/stop/edit/delete(以下の SQL ウェアハウス セクション参照) |
ID を引数に取るコマンドはすべて位置引数(--id フラグなし)です。
ID の確認には databricks warehouses list を使用してください。
# サーバーレス SQL ウェアハウスの作成
# min_num_clusters と max_num_clusters は必須(デフォルト値 0 はサーバーに拒否されます)
# リソース追跡のため aidevkit_project タグを付けてください
databricks warehouses create --json '{
"name": "my-warehouse",
"cluster_size": "Small",
"enable_serverless_compute": true,
"auto_stop_mins": 10,
"min_num_clusters": 1,
"max_num_clusters": 1,
"tags": {"custom_tags": [{"key": "aidevkit_project", "value": "ai-dev-kit"}]}
}'
# 一覧取得 — jq で id、name、state に絞り込む
databricks warehouses list -o json | jq '.[] | {id, name, state, size: .cluster_size}'
# 名前で検索
databricks warehouses list -o json | jq '.[] | select(.name == "my-warehouse")'
# 特定ウェアハウスの完全な設定を取得
databricks warehouses get <WAREHOUSE_ID>
# 起動 / 停止(いずれも LRO。即時返却する場合は --no-wait を付加)
databricks warehouses start <WAREHOUSE_ID>
databricks warehouses stop <WAREHOUSE_ID>
# リサイズ / 再設定 — 必ず完全な設定を渡すこと
#(省略したフィールドはデフォルト値に戻るため、min_num_clusters / max_num_clusters は常に明示する)
# ウェアハウスが STOPPED 状態の場合は --no-wait を付けること。
# 付けないと RUNNING になるまでブロックしてエラーになります(変更自体は適用されます)。
# ウェアハウスがすでに RUNNING の場合、--no-wait は任意です。
databricks warehouses edit <WAREHOUSE_ID> --no-wait --json '{
"name": "my-warehouse",
"cluster_size": "Medium",
"enable_serverless_compute": true,
"auto_stop_mins": 15,
"min_num_clusters": 1,
"max_num_clusters": 1
}'
# 削除(取り消し不可)
databricks warehouses delete <WAREHOUSE_ID>
サイズ一覧: 2X-Small、X-Small、Small、Medium、Large、X-Large、2X-Large、3X-Large、4X-Large
タイプ: JSON ボディに "warehouse_type": "PRO"(デフォルト)または "CLASSIC" を指定します。
Run code on Databricks. Three execution modes—choose based on workload. All examples below use the Databricks CLI; see the databricks-core skill for install and authentication.
| Aspect | Databricks Connect ⭐ | Serverless Job | Interactive Cluster |
|---|---|---|---|
| Use for | Spark code (ETL, data gen) | Heavy processing (ML) | State across tool calls, Scala/R |
| Startup | Instant | ~25-50s cold start | ~5min if stopped |
| State | Within Python process | None | Via context_id |
| Languages | Python (PySpark) | Python, SQL | Python, Scala, SQL, R |
| Dependencies | withDependencies() |
CLI with environments spec | Install on cluster |
Main decision point: if you're using Declarative Automation Bundles (DABs) then follow the instructions of the databricks-dabs skill first. In short, you can use databricks bundle run to run code associated with jobs, pipelines, and other resources. This can be recognized by looking for a databricks.yml file in the project root. If these resources don't exist, or if you're not using DABs, then proceed with the below.
Prefer Databricks Connect for all spark-based workload, then serverless.
Spark-based code? → Databricks Connect (fastest)
└─ Python 3.12 missing? → Install it + databricks-connect
└─ Install fails? → Ask user (don't auto-switch modes)
Heavy/long-running (ML)? → Serverless Job (independent)
Need state across calls? → Interactive Cluster (list and ask which one to use)
Scala/R? → Interactive Cluster (list and ask which one to use)
Read the reference file for your chosen mode before proceeding.
from databricks.connect import DatabricksSession
...
spark = DatabricksSession.builder.profile("my-local-profile").serverless(True).getOrCreate()
python my_spark_script.py
Pure CLI flow: upload a local file as a workspace notebook, fire a one-time run with databricks jobs submit (create + run in one call, ephemeral — no Jobs UI entry, no retry), then poll + fetch the result. The local file must be a Databricks source notebook — top line # Databricks notebook source (Python) or -- Databricks notebook source (SQL).
1. Upload the local file as a workspace notebook. TARGET_PATH is positional; --file is the local path.
databricks workspace import /Workspace/Users/<user>/.ai_dev_kit/train --file /local/path/to/train.py --format SOURCE --language PYTHON --overwrite
2. Submit the run. Use --no-wait to get {"run_id": N} back immediately; drop it to block until terminated. "client": "4" is required for dependencies to install ("1" silently ignores them).
databricks jobs submit --no-wait --json @submit.json
{
"run_name": "train-run",
"tasks": [{
"task_key": "main",
"notebook_task": {"notebook_path": "/Workspace/Users/<user>/.ai_dev_kit/train"},
"environment_key": "ml_env"
}],
"environments": [{
"environment_key": "ml_env",
"spec": {"client": "4", "dependencies": ["scikit-learn==1.5.2", "mlflow==2.22.0"]}
}]
}
3. Check state / wait for completion. Life-cycle: PENDING → RUNNING → TERMINATED (or SKIPPED / INTERNAL_ERROR). Only read .state.result_state (SUCCESS / FAILED / CANCELED) once life-cycle is TERMINATED.
databricks jobs get-run <RUN_ID> | jq '{state: .state.life_cycle_state, result: .state.result_state, duration_ms: .execution_duration, url: .run_page_url, task_run_id: .tasks[0].run_id}'
4. Fetch the output / error. Gotcha: get-run-output takes the task run_id (.tasks[0].run_id), NOT the parent run_id from submit. notebook_output.result is the string passed to dbutils.notebook.exit().
databricks jobs get-run-output <TASK_RUN_ID> | jq '{result: .notebook_output.result, error, error_trace}'
Always use dbutils.notebook.exit(<string>) in the notebook — print() is not captured by get-run-output. For JSON results: dbutils.notebook.exit(json.dumps({...})) then parse .notebook_output.result client-side.
Avoid by default — prefer Serverless Job. Only use an interactive cluster when:
Interactive clusters are slow to start (3-8 min) and cost money while running. Don't start one implicitly.
All compute lifecycle and code-execution actions go through the Databricks CLI. Headline commands:
| Action | Command |
|---|---|
| Upload local file as workspace notebook | databricks workspace import <WORKSPACE_PATH> --file <LOCAL> --format SOURCE --language PYTHON --overwrite |
| Run serverless code (upload + submit + wait) | databricks jobs submit --json @submit.json (see Serverless Job section above; with --no-wait for async) |
| Get run state / wait | databricks jobs get-run <RUN_ID> (poll .state.life_cycle_state) |
| Fetch run output | databricks jobs get-run-output <TASK_RUN_ID> |
| List clusters | databricks clusters list --output json |
| Get cluster details | databricks clusters get <CLUSTER_ID> |
| Start / restart / terminate cluster | databricks clusters start/restart/delete <CLUSTER_ID> |
| Permanently delete cluster | databricks clusters permanent-delete <CLUSTER_ID> |
| Create cluster | databricks clusters create --json '{...}' (see 3-interactive-cluster.md) |
| List node types / Spark versions | databricks clusters list-node-types / databricks clusters spark-versions |
| Execute code on a running cluster | databricks api post /api/1.2/contexts/create + databricks api post /api/1.2/commands/execute (see 3-interactive-cluster.md) |
| SQL warehouses | databricks warehouses create/list/get/start/stop/edit/delete (see SQL Warehouses below) |
All ID-taking commands use positional arg (no --id flag). Use databricks warehouses list to find an ID.
# Create a serverless SQL warehouse. min_num_clusters + max_num_clusters are REQUIRED
# (the server rejects the default 0). Keep the aidevkit_project tag for resource tracking.
databricks warehouses create --json '{
"name": "my-warehouse",
"cluster_size": "Small",
"enable_serverless_compute": true,
"auto_stop_mins": 10,
"min_num_clusters": 1,
"max_num_clusters": 1,
"tags": {"custom_tags": [{"key": "aidevkit_project", "value": "ai-dev-kit"}]}
}'
# List / find — trim to id, name, state with jq
databricks warehouses list -o json | jq '.[] | {id, name, state, size: .cluster_size}'
# Find by name
databricks warehouses list -o json | jq '.[] | select(.name == "my-warehouse")'
# Get one warehouse's full config
databricks warehouses get <WAREHOUSE_ID>
# Start / stop (both are LROs; add --no-wait to return immediately)
databricks warehouses start <WAREHOUSE_ID>
databricks warehouses stop <WAREHOUSE_ID>
# Resize / reconfigure — pass the FULL desired config (omitted fields revert to defaults,
# so always re-state min_num_clusters/max_num_clusters). Use --no-wait if the warehouse
# is STOPPED, otherwise edit blocks trying to reach RUNNING and errors out (the mutation
# itself still applies). When the warehouse is already RUNNING, --no-wait is optional.
databricks warehouses edit <WAREHOUSE_ID> --no-wait --json '{
"name": "my-warehouse",
"cluster_size": "Medium",
"enable_serverless_compute": true,
"auto_stop_mins": 15,
"min_num_clusters": 1,
"max_num_clusters": 1
}'
# Delete (irreversible)
databricks warehouses delete <WAREHOUSE_ID>
Sizes: 2X-Small, X-Small, Small, Medium, Large, X-Large, 2X-Large, 3X-Large, 4X-Large. Types: set "warehouse_type": "PRO" (default) or "CLASSIC" in the JSON body.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。