山pの楽しいお勉強生活

勉強の成果を垂れ流していきます

Databricksでは日本語は使用しない方が良い

概要

Databricksでファイル名、フォルダ名、引数では日本語を使用できない場合があるので、使用しない方が良い。

詳細

今時当たり前だが、Databricksでは普通に日本語を使用可能。 ファイル名やフォルダ名でもnotebbook単体で普通に使う分には問題ない。

だが、下記に記載するように幾つかの場合で日本語が問題になる事がある。

※ここに記載した事項以外でもあるのかもしれない。
公式フォーラムでも見つからなかった。

別のノートブックから起動する場合

ファイル名、フォルダ名に日本語が入っていると、他のノートブックから起動できない。

コード例

# 「/Users/xxxxx@example.com/日本語/b」を起動する
dbutils.notebook.run('b', 600)

出力

com.databricks.WorkflowException: com.databricks.NotebookExecutionException: Unknown state: Notebook not found: /Users/xxxxx@example.com/work/????/b

引数に日本語の値を渡す場合

引数の「値」に日本語を渡すと正しく渡されない

コード例

  • ノートブックA
dbutils.notebook.run('b', 600,{ 'args' : '日本語'})
  • ノートブックB
dbutils.widgets.removeAll()
dbutils.widgets.text('args', 'default', '引数')
print(dbutils.widgets.get('args'))

出力

???

jobs画面でパラメータを見ると「{"args":"???"}」となっているので、この時点で化けている。

対策

  • 日本語ファイル名、フォルダ名を使用しない
  • 引数の場合は英数字の形に変換し、復元して使用する
import urllib
args = urllib.parse.quote('日本語')
dbutils.notebook.run('b', 600,{ 'args' : args})
import re
import urllib
dbutils.widgets.removeAll()
dbutils.widgets.text('args', 'default', '引数')
args = dbutils.widgets.get('args')
# 判定は雑です。
r = re.compile('(%[a-zA-Z0-9]{2})+')
if r.match(args):
  args = urllib.parse.unquote(args)
print(args)