DatabricksでカスタムPythonライブラリを利用する方法

> [Databricksクイックスタートガイド](https://qiita.com/taka_yayoi/items/125231c126a602693610)のコンテンツです。

本記事では、PyPIなどで公開されているライブラリではなく、ご自身で開発されたPythonのカスタムライブラリをDatabricksで利用する方法をご説明します。

> **注意**
本記事はWheelをインストールする手順をご説明します。カスタムライブラリに頻繁に変更が加えられる場合には、後述する[Repos](#reposの活用)の利用をご検討ください。

以前の[記事](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#libify%E3%81%AB%E3%82%88%E3%82%8B%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E5%88%A9%E7%94%A8)でカスタムライブラリの利用方法に触れていましたが、今回は以下の1の方法について具体的にご説明します。

> 1. wheelを作成して、ワークスペースライブラリとしてインストール
> 1. libify · PyPIをインストールし、ノートブック間のimportを実現する

# カスタムライブラリの準備

今回は以下のような構成のシンプルなライブラリを使用します。

```
my_module
├── setup.py
└── src
    └── tasks
        ├── __init__.py
        └── sample.py
```

```python:setup.py
from setuptools import setup, find_packages

setup(
    name='tasks',
    version='0.1.1',
    license='proprietary',
    description='Module Experiment',

    author='taka-yayoi',
    author_email='takaaki.yayoi@databricks.com',
    url='databricks.com',

    packages=find_packages(where='src'),
    package_dir={'': 'src'},
)
```

```python:__init__.py
# Databricks notebook source
from .sample import (
    test
)

__version__ = '0.1.0'
```

```python:sample.py
def test():
	print("test module worked!")
```

# wheelの作成

`my_module`に移動して以下を実行します。

```sh
python setup.py bdist_wheel
```

すると、以下のようにファイルが作成されます。`dist`にある`tasks-0.1.1-py3-none-any.whl`がWheelファイルとなります。

```
my_module
├── build
│   ├── bdist.macosx-10.15-x86_64
│   └── lib
│       └── tasks
│           ├── __init__.py
│           ├── sample.py
│           └── sample2.py
├── dist
│   └── tasks-0.1.1-py3-none-any.whl
├── setup.py
└── src
    ├── tasks
    │   ├── __init__.py
    │   ├── sample.py
    │   └── sample2.py
    └── tasks.egg-info
        ├── PKG-INFO
        ├── SOURCES.txt
        ├── dependency_links.txt
        └── top_level.txt
```

# カスタムライブラリのインストール

ノートブックスコープライブラリ、クラスターライブラリとしてインストールできますが、毎回インストールの必要がないクラスターライブラリとしてインストールします。

1. インストール対象のクラスターを起動します。
1. **Libraries**タブを開いて**Install New**をクリックします。
![Screen Shot 2021-06-16 at 9.09.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/54be171f-238c-f30a-f26b-3868dc848aec.png)
1. **Library Type**で**Python Whl**を選択して、上で作成したWheelファイルをドラッグアンドドロップして、**Install**をクリックします。。
![Screen Shot 2021-06-16 at 9.09.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/73d83144-8ec3-dc05-2192-0493f5484496.png)

以下のような状態になればライブラリのインストールは完了です。
![Screen Shot 2021-06-16 at 9.18.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ff4863aa-0750-b13d-d70b-5467e6b90f79.png)

# カスタムライブラリのインポート

1. カスタムライブラリをインストールしたクラスターにノートブックにアタッチします。
1. 以下のようにライブラリをインポートして、ライブラリ内の関数を呼び出します。
![Screen Shot 2021-06-16 at 9.21.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c7c12efe-4b49-df31-7f16-1c158f061862.png)


# Reposの活用

Githubをご利用されている場合には、Reposをご活用いただくことでリポジトリ上のカスタムライブラリをインポートすることができます。

[Databricks ReposによるGit連携 \- Qiita](https://qiita.com/taka_yayoi/items/b89f199ff0d3a4c16140)

Reposを活用することで、GitHubにコミットしたライブラリをインポートすることができます。

1. インポートする際にはGitHubのPersonal Access Tokenが必要となります。秘匿性の高い情報ですので、CLIを使用して事前にシークレットとして登録しておきおます。
2. 以下のように、pipでライブラリをインストールしてライブラリで定義されている関数を呼び出します。

[Databricksにおけるシークレットの管理 \- Qiita](https://qiita.com/taka_yayoi/items/338ef0c5394fe4eb87c0)

```python:Githubからのインポート例(Python)
# シークレットからGitHubのパーソナルアクセストークンを取得
token = dbutils.secrets.get(scope = "takaaki.yayoi@databricks.com", key = "github")

# pipを用いてライブラリをインストール
%pip install git+https://$token@github.com/taka-yayoi/project-test.git
```

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)