はじめに
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. クラスや関数の書かれたノートブックを作成する
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2206424%2Fc53e58b3-67d3-701b-50f0-56ce55ed6034.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=366abf0062b2aba9b928e1991a4252bd)
2. ノートブックのパスをコピーする
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2206424%2F17471e5c-b921-6b8b-ef85-4e98af1770be.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=13a18620dcf17a73c9e1c49ff417617a)
3. 別のノートブックを実行して、関数を呼び出す
%run <notebook path>
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F2206424%2F1edf4f2d-9e52-bc19-7f7f-f334d641898b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c968aef24e42bdb2ebfcd5bd1ef13f3c)
如何だったでしょうか? フォルダーなどで管理しておけば、モジュール系も含めて管理出来るし簡単にソースの変更が可能になるので便利ですよね。