はじめに
Databricksを使っていく上で、最初の方でぶつかるのがpythonモジュールのimportではないでしょうか?すでにpublishされているライブラリー等であれば、pipなど使って installできますが、カスタムモジュールを導入するにはどんな方法があるのでしょうか?今回、様々な方法を探ってみました。
カスタムモジュール or カスタムライブラリーの導入手段
自分が見つけた方法については以下のやりかたです。
- github と連携してモジュールをimport
- DBFS上にモジュールをアップロードして、pythonライブラリーパスを追加
- libifyをインストールし、ノートブック間のimportを実現する -- 設定方法
- wheelを作成して、ワークスペースライブラリとしてインストール --- 設定方法
- wheelを作成して、git上に配置して、pip install ---- 設定方法
番外編) クラスや関数が書かれた別のnotebookを読み込んで実行する。
他にも方法があるかもしれませんが、もしご存知であれば是非教えてください。
3,4,5 については、すでに設定方法の記事がありますので、そちらをご覧ください。今回は1,2のモジュールimport方法と番外編の別のノートブックを実行するをご紹介したいと思います。
1. githubと連携して、モジュールをimportする
今回は、こちらにある手順を参考にしました。
1) sample code作成
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が見えるようになります。
3) Reposにあるnotebookから、同一の directoryもしくは sub directoryにあるモジュールが importできます。
今回は、files-in-repos notebookから実行します。
これは、Reposの current directory pathが自動的にpython pathに追加されているため、上記のようにモジュールを importできるようになります。
もし、別の 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'))
Githubと連携しておくことで、コードの変更などもgit上で行うことができ、CI/CDを実現できるためお勧めです。
2. DBFS上にモジュールをアップロードして、pythonライブラリーパスを追加
- のやり方を応用すれば、gitと連携しなくても、モジュールを簡単に追加することが可能になります。
サンプルコードを DBFS上にアップロードします。
今回は、 /FileStore/custom_module にアップロードします
追加したDBFSパスを追加することで、モジュールのimportが可能になります。(頭に /dbfsをつけるのに注意ください。)
こちらの方法は、モジュールの編集時にはローカルで編集したものを毎回アップロードする必要があるため、git連携できるのであれば、1の方法がお勧めです。
おまけ
auto reload 機能
モジュールを修正した場合、以下のコマンドを実行しておくことで、auto reload機能を利用できます。
%load_ext autoreload
%autoreload 2
番外編: クラスや関数が書かれた別のノートブックを実行して読み込む
.pyなどで管理せずに、ノートブックとしてクラスや関数を管理することがデータブリックスでは可能です。
1. クラスや関数の書かれたノートブックを作成する
2. ノートブックのパスをコピーする
3. 別のノートブックを実行して、関数を呼び出す
%run <notebook path>
如何だったでしょうか? フォルダーなどで管理しておけば、モジュール系も含めて管理出来るし簡単にソースの変更が可能になるので便利ですよね。