LoginSignup
4
0

More than 3 years have passed since last update.

Databricksでフォルダ名やNotebook名に日本語を使うと困る場合がある

Posted at

先に結論

フォルダ名や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コーラー
  • 呼び出し元Notebookの格納フォルダの名前に日本語を使用した場合
    • /Users/xxx@yyy.jp/テスト/MyNotebookCaller

なお以下のケースの場合は問題なく呼び出しに成功しました

  • 呼び出し先Notebookの名前に日本語を使用した場合
    • /Users/xxx@yyy.jp/Myノートブック
  • 呼び出し先Notebookの格納フォルダの名前に日本語を使用した場合
    • /Users/xxx@yyy.jp/テスト/MyNotebook

検証

各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を呼んでみます

Cmd1 同一フォルダの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を呼んでみても、

Cmd2 テストフォルダの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を呼んでみます

Cmd1 同一フォルダの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ノートブックを呼んでみます

Cmd2 同一フォルダの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を呼んでみます

Cmd3 テストフォルダのMyNotebookを呼ぶ
dbutils.notebook.run(
  "./テスト/MyNotebook",
  60,
  {
    "param1": "val1",
    "param2": "val2"
  }
)

呼び出し先のNotebookのフォルダ名に日本語が使われているにもかかわらず処理が正常終了しました。
渡したパラメータもちゃんと出力されているようです。

param1:val1,param2:val2

まとめ

フォルダ名やNotebook名に日本語を使う場合は気をつけましょう

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0