先に結論
フォルダ名やNotebook名に日本語を使用した場合、dbutils.notebook.run を使って他のNotebookを呼ぶとエラーになるケースがある
どういうことか
次のようなフォルダ構成のNotebookがあります
/Users/xxx@yyy.jp
|-MyNotebook
|-Myノートブック
|-MyNotebookCaller
|-MyNotebookコーラー
|-テスト
|-MyNotebook
|-MyNotebookCaller
このうち、以下のケースに当てはまる場合、dbutils.notebook.run を使った別Notebookの呼び出しに失敗しました
-
呼び出し元Notebookの名前に
日本語を使用
した場合- /Users/xxx@yyy.jp/
MyNotebookコーラー
- /Users/xxx@yyy.jp/
-
呼び出し元Notebookの格納フォルダの名前に
日本語を使用
した場合- /Users/xxx@yyy.jp/
テスト
/MyNotebookCaller
- /Users/xxx@yyy.jp/
なお以下のケースの場合は問題なく呼び出しに成功しました
- 呼び出し先Notebookの名前に
日本語を使用
した場合- /Users/xxx@yyy.jp/
Myノートブック
- /Users/xxx@yyy.jp/
- 呼び出し先Notebookの格納フォルダの名前に
日本語を使用
した場合- /Users/xxx@yyy.jp/
テスト
/MyNotebook
- /Users/xxx@yyy.jp/
検証
各Notebookの説明
MyNotebookCaller
もしくはMyNotebookコーラー
からMyNotebook
にパラメータを渡して呼び出して、MyNotebook
では受け取ったパラメータをprint
するだけという簡単な処理となります
/Users/xxx@yyy.jp/MyNotebook
dbutils.widgets.text("param1", "111")
dbutils.widgets.text("param2", "222")
print("param1:{},param2:{}".format(dbutils.widgets.get("param1"), dbutils.widgets.get("param2")))
/Users/xxx@yyy.jp/Myノートブック
#/Users/xxx@yyy.jp/MyNotebookと同じ
/Users/xxx@yyy.jp/MyNotebookCaller
#Cmd1 同一フォルダのMyNotebookを呼ぶ
dbutils.notebook.run(
"./MyNotebook",
60,
{
"param1": "val1",
"param2": "val2"
}
)
#Cmd2 同一フォルダのMyノートブックを呼ぶ
dbutils.notebook.run(
"./Myノートブック",
60,
{
"param1": "val1",
"param2": "val2"
}
)
#Cmd3 テストフォルダのMyNotebookを呼ぶ
dbutils.notebook.run(
"./テスト/MyNotebook",
60,
{
"param1": "val1",
"param2": "val2"
}
)
/Users/xxx@yyy.jp/MyNotebookコーラー
#/Users/xxx@yyy.jp/MyNotebookCallerと同じ
/Users/xxx@yyy.jp/テスト/MyNotebook
#/Users/xxx@yyy.jp/MyNotebookと同じ
/Users/xxx@yyy.jp/テスト/MyNotebookCaller
#Cmd1 同一フォルダのMyNotebookを呼ぶ
dbutils.notebook.run(
"./MyNotebook",
60,
{
"param1": "val1",
"param2": "val2"
}
)
#Cmd2 一つ上のフォルダのMyNotebookを呼ぶ
dbutils.notebook.run(
"../MyNotebook",
60,
{
"param1": "val1",
"param2": "val2"
}
)
検証① 呼び出し元Notebookの名前に日本語を使用
した場合
/Users/xxx@yyy.jp/MyNotebookコーラー
から同一フォルダのMyNotebookを呼んでみます
dbutils.notebook.run(
"./MyNotebook",
60,
{
"param1": "val1",
"param2": "val2"
}
)
結果としてWorkflowException
が発生しました。
ラテン文字(ASCII文字セット)以外の文字である日本語を使ったことでエラーが返ってきたようです。
com.databricks.WorkflowException: com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_PARAMETER_VALUE: Only Latin1 (ASCII) characters are currently supported. Any international characters must be removed or replaced in workflow_context
一応テストフォルダのMyNotebookを呼んでみても、
dbutils.notebook.run(
"./テスト/MyNotebook",
60,
{
"param1": "val1",
"param2": "val2"
}
)
こちらも同様にWorkflowException
が発生しました
com.databricks.WorkflowException: com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_PARAMETER_VALUE: Only Latin1 (ASCII) characters are currently supported. Any international characters must be removed or replaced in workflow_context
検証② 呼び出し元Notebookの格納フォルダの名前に日本語を使用
した場合
/Users/xxx@yyy.jp/テスト
/MyNotebookCallerから同一フォルダのMyNotebookを呼んでみます
dbutils.notebook.run(
"./MyNotebook",
60,
{
"param1": "val1",
"param2": "val2"
}
)
こちらも結果としてWorkflowException
が発生しました
com.databricks.WorkflowException: com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_PARAMETER_VALUE: Only Latin1 (ASCII) characters are currently supported. Any international characters must be removed or replaced in workflow_context
検証③ 呼び出し先Notebookの名前に日本語を使用
した場合
/Users/xxx@yyy.jp/MyNotebookCallerから/Users/xxx@yyy.jp/Myノートブック
を呼んでみます
dbutils.notebook.run(
"./Myノートブック",
60,
{
"param1": "val1",
"param2": "val2"
}
)
呼び出し先のNotebook名に日本語が使われているにもかかわらず処理が正常終了しました。
渡したパラメータもちゃんと出力されているようです。
param1:val1,param2:val2
検証④ 呼び出し先Notebookの格納フォルダの名前に日本語を使用
した場合
/Users/xxx@yyy.jp/MyNotebookCallerから/Users/xxx@yyy.jp/テスト
/MyNotebookを呼んでみます
dbutils.notebook.run(
"./テスト/MyNotebook",
60,
{
"param1": "val1",
"param2": "val2"
}
)
呼び出し先のNotebookのフォルダ名に日本語が使われているにもかかわらず処理が正常終了しました。
渡したパラメータもちゃんと出力されているようです。
param1:val1,param2:val2
まとめ
フォルダ名やNotebook名に日本語を使う場合は気をつけましょう