2
2

More than 1 year has passed since last update.

Databricksにて取得元ファイルを切り替えて変数を動的に取得する方法

Last updated at Posted at 2021-12-08

概要

Databricksにて、変数を保持させた複数のファイルがある場合に、動的に取得元のファイルを切り替えた変数により処理を実行する方法を紹介します。本手順は、files in a Databricks repo を利用します。

下記のように変数を保持した2つのファイルがあり、取得元のファイルを切り替えることで変数を動的に取得する方法です。

image.png

image.png

変数にて取得元のファイル名である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)

image.png

詳細なコードを確認したい方は、下記のGithubページにてご確認ください。

DatabricksのコードをGihtub Pagesで公開する方法については、下記の記事で紹介してます。

詳細な手順

事前準備

下記の構成で、ディレクトリ、ノートブック、及び、ファイルを作成。

/Workspace/Repos/databricks_test/databricks_test2
|--config
|  |--table__001.py
|  |--table__002.py
|--executor

image.png

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',
    },

}

image.png

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',
    },

}

image.png

ディレクトリにあるファイルを確認

file_dir = os.path.abspath('./config')
print(file_dir)

import glob
files = glob.glob(file_dir + '/*')
for file in files:
    print(file)

image.png

ファイルの確認

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)

image.png

静的にファイルの変数を取得

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)

image.png

動的にファイルの変数を取得(取得元のノートブック名を変数により切り替える方法)

# 変数取得元のファイル名を指定
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)

image.png

注意事項

dbutils.fs.lsではファイルを確認する際にはfile:で始める必要があること

file_path = 'file:/Workspace/Repos/databricks_test/databricks_test2/config/table__001.py'

dbutils.fs.ls(file_path)

image.png

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()

image.png

Databricksノートブック名を動的に変更して変数を取得する方法としては、dbutils.notebookを利用する方法があります。

2
2
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
2
2