概要
Databricks にて処理の共通化を実施するために dbutils.notebook.run により他のノートブックを実行することがあるのですが、実行先のノートブックでエラーが発生した際の調査手順を紹介します。
実行先のノートブックでエラーが発生する際には下記のようなエラーが発生します。エラーが発生した際のこのスクリーンショットやエラーメッセージを送付されることがありますが、エラー原因が書かれていないため調査ができません。
Py4JJavaError: An error occurred while calling o417.run.
: com.databricks.WorkflowException: com.databricks.NotebookExecutionException: FAILED: Workload failed, see run output for details
at com.databricks.workflow.WorkflowDriver.run(WorkflowDriver.scala:99)
エラーとなったノートブックのStart time
の時刻を選択して、実行先のノートブックの実行結果を表示してエラーメッセージを確認する必要があります。下記エラーメッセージでは、int 関数に渡された文字が不適切であるようです。
本記事では、ノートブックを作成し、エラーを発生後にそのエラーを修正する手順まで紹介します。
dbutils.notebook.run
による処理の共通化については下記の記事で紹介しています。
事前準備
1. 実行先ノートブックをexecutor_notebook_01
という名称で作成して、下記のコードを記述
# Widget を定義
dbutils.widgets.text("input_value", "1")
input_value = dbutils.widgets.get("input_value")
# Widget から取得した値を数値型に変換
input_value_to_int = int(input_value)
2. 同一のディレクトリに、実行元ノートブックをrunner_noteboke_01
という名称で作成して、下記のコードを記述
nb_path = "executor_notebook_01"
nb_para = {
"input_value": "a",
}
timeout = 0
dbutils.notebook.run(nb_path, timeout, nb_para)
エラーの再現と対応方法
1. エラーを再現
1-1. 実行元ノートブックであるrunner_noteboke_01
を実行してエラーとなることを確認
Py4JJavaError: An error occurred while calling o412.run.
: com.databricks.WorkflowException: com.databricks.NotebookExecutionException: FAILED: Workload failed, see run output for details
at com.databricks.workflow.WorkflowDriver.run(WorkflowDriver.scala:99)
ValueError: invalid literal for int() with base 10: 'a'
2. エラーへの対応方法
2-1. 実行元ノートブックであるrunner_noteboke_01
内のinput_value
の値を100
に変更
nb_path = "executor_notebook_01"
nb_para = {
- "input_value": "a",
+ "input_value": "100",
}
timeout = 0