LoginSignup
8
5

More than 1 year has passed since last update.

Databricksで python モジュールをimportするには?

Last updated at Posted at 2021-12-06

はじめに

Databricksを使っていく上で、最初の方でぶつかるのがpythonモジュールのimportではないでしょうか?すでにpublishされているライブラリー等であれば、pipなど使って installできますが、カスタムモジュールを導入するにはどんな方法があるのでしょうか?今回、様々な方法を探ってみました。

カスタムモジュール or カスタムライブラリーの導入手段

自分が見つけた方法については以下のやりかたです。

  1. github と連携してモジュールをimport
  2. DBFS上にモジュールをアップロードして、pythonライブラリーパスを追加
  3. libifyをインストールし、ノートブック間のimportを実現する -- 設定方法
  4. wheelを作成して、ワークスペースライブラリとしてインストール --- 設定方法
  5. wheelを作成して、git上に配置して、pip install ---- 設定方法

番外編) クラスや関数が書かれた別のnotebookを読み込んで実行する。

他にも方法があるかもしれませんが、もしご存知であれば是非教えてください。

3,4,5 については、すでに設定方法の記事がありますので、そちらをご覧ください。今回は1,2のモジュールimport方法番外編の別のノートブックを実行するをご紹介したいと思います。

1. githubと連携して、モジュールをimportする

今回は、こちらにある手順を参考にしました。

1) sample code作成

sample.py
def n_to_mth(n,m):
  print(n, "to the", m, "th power is", n**m)

2) ReposによるGit連携

Databricksの Repos機能を使って Git連携する方法については、こちらをご覧ください。

今回は、https://github.com/databricks/files_in_repos.git  と連携しました。

連携が完了すると、Reposメニューから files_in_reposが見えるようになります。
image.png

3) Reposにあるnotebookから、同一の directoryもしくは sub directoryにあるモジュールが importできます。

今回は、files-in-repos notebookから実行します。
image.png

これは、Reposの current directory pathが自動的にpython pathに追加されているため、上記のようにモジュールを importできるようになります。

image.png

もし、別の directoryにあるノートブックから、実行する場合は、repos pathを事前に追加する必要があります。

import sys
import os

# In the command below, replace <username> with your Databricks user name.
sys.path.append(os.path.abspath('/Workspace/Repos/<username>/supplemental_files'))

image.png

Githubと連携しておくことで、コードの変更などもgit上で行うことができ、CI/CDを実現できるためお勧めです。

2. DBFS上にモジュールをアップロードして、pythonライブラリーパスを追加

  1. のやり方を応用すれば、gitと連携しなくても、モジュールを簡単に追加することが可能になります。

サンプルコードを DBFS上にアップロードします。
今回は、 /FileStore/custom_module にアップロードします

image.png

追加したDBFSパスを追加することで、モジュールのimportが可能になります。(頭に /dbfsをつけるのに注意ください。)

image.png

こちらの方法は、モジュールの編集時にはローカルで編集したものを毎回アップロードする必要があるため、git連携できるのであれば、1の方法がお勧めです。

おまけ

auto reload 機能

モジュールを修正した場合、以下のコマンドを実行しておくことで、auto reload機能を利用できます。

%load_ext autoreload
%autoreload 2

sample.py を下記のように修正します。
image.png

モジュール修正が反映されております。
image.png

番外編: クラスや関数が書かれた別のノートブックを実行して読み込む

.pyなどで管理せずに、ノートブックとしてクラスや関数を管理することがデータブリックスでは可能です。

1. クラスや関数の書かれたノートブックを作成する

2. ノートブックのパスをコピーする

3. 別のノートブックを実行して、関数を呼び出す

%run <notebook path>

如何だったでしょうか? フォルダーなどで管理しておけば、モジュール系も含めて管理出来るし簡単にソースの変更が可能になるので便利ですよね。

8
5
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
8
5