概要
Databricksにて、変数を保持させた複数のファイルがある場合に、動的に取得元のファイルを切り替えた変数により処理を実行する方法を紹介します。本手順は、files in a Databricks repo を利用します。
下記のように変数を保持した2つのファイルがあり、取得元のファイルを切り替えることで変数を動的に取得する方法です。
変数にて取得元のファイル名であるtable__002
を指定して、table__002の辞書型変数を取り出します。
# 変数取得元のファイル名を指定
variable_file_name = 'table__002'
# 取得
import importlib
var = importlib.import_module(variable_file_name)
# 変数のデータ型と中身を表示
import pprint
print(type(var))
print('\n')
pprint.pprint(var.tables_info_list)
詳細なコードを確認したい方は、下記のGithubページにてご確認ください。
DatabricksのコードをGihtub Pagesで公開する方法については、下記の記事で紹介してます。
詳細な手順
事前準備
下記の構成で、ディレクトリ、ノートブック、及び、ファイルを作成。
/Workspace/Repos/databricks_test/databricks_test2
|--config
| |--table__001.py
| |--table__002.py
|--executor
table__001.pyには、下記を記載
tables_info_list = {
'table_conf_name' : 'table__001',
'deploy_target_db_and_table_names': {
'dev' : [
'test_deploy_dev.table__001',
],
},
'data_source' : 'delta',
'location' : {
'dev' : '/tmp/dev/test_deploy/table__001',
},
}
table__002.pyにて、下記を記載
tables_info_list = {
'table_conf_name' : 'table__002',
'deploy_target_db_and_table_names': {
'dev' : [
'test_deploy_dev.table__002',
],
},
'data_source' : 'delta',
'location' : {
'dev' : '/tmp/dev/test_deploy/table__002',
},
}
ディレクトリにあるファイルを確認
file_dir = os.path.abspath('./config')
print(file_dir)
import glob
files = glob.glob(file_dir + '/*')
for file in files:
print(file)
ファイルの確認
file_path = '/Workspace/Repos/databricks_test/databricks_test2/config/table__001.py'
with open(file_path, 'r') as f:
file_contents = f.read()
print(file_contents)
静的にファイルの変数を取得
import sys
import os
sys.path.append(file_path)
import table__002 as var
import pprint
print(type(var.tables_info_list))
print('\n')
pprint.pprint(var.tables_info_list)
動的にファイルの変数を取得(取得元のノートブック名を変数により切り替える方法)
# 変数取得元のファイル名を指定
variable_file_name = 'table__002'
# 取得
import importlib
var = importlib.import_module(variable_file_name)
# 変数のデータ型と中身を表示
import pprint
print(type(var))
print('\n')
pprint.pprint(var.tables_info_list)
注意事項
dbutils.fs.ls
ではファイルを確認する際にはfile:
で始める必要があること
file_path = 'file:/Workspace/Repos/databricks_test/databricks_test2/config/table__001.py'
dbutils.fs.ls(file_path)
Databricksノートブックの中身を確認することができないこと
try:
file_path = '/Workspace/Repos/databricks_test/databricks_test2/config/sample_notebook'
with open(file_path, 'r') as f:
file_contents = f.read()
print(file_contents)
except:
import traceback
traceback.print_exc()
Databricksノートブック名を動的に変更して変数を取得する方法としては、dbutils.notebook
を利用する方法があります。