Databricksにおけるライブラリ管理

[Libraries \| Databricks on AWS](https://docs.databricks.com/libraries/index.html) [2022/4/4時点]の翻訳です。

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


:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

お使いのクラスターで実行されるノートブックやジョブでサードパーティのカスタムコードを利用できるようにするために、ライブラリをインストールすることができます。ライブラリはPython、Java、Scala、Rで記述することができます。Java、Scala、Pythonのライブラリをアップロードすることができ、PyPI、Maven、CRANリポジトリの外部パッケージをポイントすることができます。

本書では、ワークスペースのUIにおけるライブラリのタスクの実行にフォーカスします。また、[Libraries CLI](https://docs.databricks.com/dev-tools/cli/libraries-cli.html)や[Libraries API 2\.0](https://docs.databricks.com/dev-tools/api/latest/libraries.html)をインストールすることができます。

:::note info
**ティップス**
Databricksランタイムには多くの一般的なライブラリが含まれています。Databricksランタイムに含まれているライブラリを確認するには、お使いのDatabricksランタイムバージョンに対応する[Databricks Runtime release notes](https://docs.databricks.com/release-notes/runtime/releases.html)の**System Environment**セクションをご覧ください。
:::

:::note warn
**重要！**
お使いのノートブックやジョブが終了した際に、DatabricksはPythonの`atexit`関数を呼び出しません。`atexit`ハンドラーを登録するPythonライブラリを使用している場合、お使いのコードでexitする前に必要な関数を呼び出していることを確認してください。

Python eggのインストールは非推奨となり、将来的なDatabricksランタイムのリリースからは削除される予定です。代わりにPython wheelsを使用するか、PyPIからパッケージをインストールしてください。
:::

3つのモードでライブラリをインストールすることができます。ワークスペース、クラスターへのインストール、ノートブックスコープでのインストールです。

- [ワークスペースライブラリ](https://qiita.com/taka_yayoi/items/b1668be2ebb6a7841bd0)は、クラスターにインストールされるライブラリのローカルリポジトリとして動作します。あなたの組織によって開発されたカスタムコードや、あなたの組織で標準化した特定バージョンのオープンソースライブラリなどがワークスペースライブラリになるかもしれません。
- [クラスターライブラリ](https://qiita.com/taka_yayoi/items/869158c7bd3ab7c45ff4)は、クラスターで動作しているすべてのノートブックから使用することができます。PyPIやMavenのような公開リポジトリから直接クラスターライブラリをインストールしたり、事前にインストールされたワークスペースライブラリからインストールすることができます。
- PythonとRで使用できるノートブックスコープライブラリを用いることで、ノートブックのセッションに限定された環境にライブラリをインストールすることができます。これらのライブラリは、同じクラスターで動作している他のノートブックには影響を与えません。ノートブックスコープライブラリは永続化されず、セッションごとに再インストールする必要があります。特定のノートブック向けのカスタム環境が必要になった際に、ノートブックスコープライブラリを使用します。

    - [ノートブックスコープPythonライブラリ](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0)
    - [ノートブックスコープRライブラリ](https://docs.databricks.com/libraries/notebooks-r-libraries.html)

このセクションでは以下をカバーします。

- [ワークスペースライブラリ](https://qiita.com/taka_yayoi/items/b1668be2ebb6a7841bd0)
- [クラスターライブラリ](https://qiita.com/taka_yayoi/items/9407356caadea3dfb47c)
- [ノートブックスコープPythonライブラリ](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0)
- [ノートブックスコープRライブラリ](https://docs.databricks.com/libraries/notebooks-r-libraries.html)

# Pythonの環境管理

以下の表では、DatabricksでPythonライブラリをインストールするオプションの概要を説明しています。

:::note info
**注意**
- マジックコマンドを使用するノートブックスコープライブラリは、Databricksランタイム7.1以降、Databricks機械学習ランタイム7.1以降、Databricks Runtime 7.1 for Genomics以降ではデフォルトで有効化されています。また、Databricks Runtime 6.4 MLから7.0 ML、Databricks Runtime 6.4 for GenomicsからDatabricks Runtime 7.0 for Genomicsにおいても、設定を行うことで利用することができます。詳細は[要件](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#%E8%A6%81%E4%BB%B6)をご覧ください。
- ライブラリユーティリティによるノートブックスコープライブラリは、Databricksランタイムでのみ利用することができます。Databricks機械学習ランタイムやDatabricks Runtime for Genomicsでは使用できません。
:::

| Pythonパッケージのソース | [%pipを用いたノートブックスコープライブラリ](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0) | [ライブラリユーティリティによるノートブックスコープライブラリ](https://docs.databricks.com/dev-tools/databricks-utils.html#dbutils-library)(非推奨) | [クラスターライブラリ](https://qiita.com/taka_yayoi/items/9407356caadea3dfb47c) | [Jobs API](https://docs.databricks.com/dev-tools/api/latest/jobs.html)による[ジョブライブラリ](https://docs.databricks.com/dev-tools/api/latest/libraries.html#managedlibrarieslibrary) |
|:--|:--|:--|:--|:--|
| PyPI  | `%pip install`を使います。[サンプル](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#pip%E3%81%AB%E3%82%88%E3%82%8B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)をご覧ください。  | `dbutils.library.installPyPI`を使います。  |[ソースとしてPyPI](https://qiita.com/taka_yayoi/items/b1668be2ebb6a7841bd0#pypi%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8)を選択します。  | ジョブライブラリに新規`pypi`オブジェクトを追加し、`package`フィールドを指定します。  |
|  NexusやArtifactoryのようなプライベートPyPIミラー | `--index-url`オプションを指定して`%pip install`を使います。[シークレット管理](https://qiita.com/taka_yayoi/items/338ef0c5394fe4eb87c0)を活用することができます。[サンプル](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#pip%E3%81%A8databricks%E3%82%B7%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88%E3%81%A7%E7%AE%A1%E7%90%86%E3%81%95%E3%82%8C%E3%82%8B%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)をご覧ください。  |  `dbutils.library.installPyPI`を使用し、引数`repo`を指定します。 | サポートされていません。  | サポートされていません。  |
| 生のソースを持つGitHubのようなVCS  |  `%pip install`を使用し、パッケージ名にリポジトリのURLを指定します。[サンプル](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#pip%E3%81%A8databricks%E3%82%B7%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88%E3%81%A7%E7%AE%A1%E7%90%86%E3%81%95%E3%82%8C%E3%82%8B%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)をご覧ください。 | サポートされていません。  |  [ソースとしてPyPI](https://qiita.com/taka_yayoi/items/b1668be2ebb6a7841bd0#pypi%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8)を選択し、パッケージ名としてリポジトリのURLを指定します。 | ジョブライブラリに新規`pypi`オブジェクトを追加し、`package`フィールドにリポジトリURLを指定します。  |
| 生のソースを持つプライベートVCS  | [ソースとしてPyPI](https://qiita.com/taka_yayoi/items/b1668be2ebb6a7841bd0#pypi%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8)を選択し、パッケージ名としてリポジトリのURLとbasic認証を指定します。[シークレット管理](https://qiita.com/taka_yayoi/items/338ef0c5394fe4eb87c0)を活用することができます。[サンプル](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#pip%E3%81%A8databricks%E3%82%B7%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88%E3%81%A7%E7%AE%A1%E7%90%86%E3%81%95%E3%82%8C%E3%82%8B%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)をご覧ください。  |  サポートされていません。 |  サポートされていません。 | サポートされていません。  |
| DBFS  |`%pip install`を使います。[サンプル](https://qiita.com/taka_yayoi/items/d3a46efdc1ad01a581d0#pip%E3%81%AB%E3%82%88%E3%82%8Bdbfs%E3%81%8B%E3%82%89%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)をご覧ください。  | `dbutils.library.install(dbfs_path)`を使います。  | ソースとして[DBFS/S3](https://qiita.com/taka_yayoi/items/b1668be2ebb6a7841bd0#%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%95%E3%82%8C%E3%81%9Fjarpython-eggpython-wheel%E3%81%AE%E5%8F%82%E7%85%A7)を選択します。  | ジョブライブラリに新規`egg`あるいは`whl`オブジェクトを追加し、`package`フィールドとしてDBFSパスを指定します。  |
| S3  | 事前サイン済みURLと一緒に`%pip install`を使用します。S3プロトコル`s3://`はサポートされていません。  | `dbutils.library.install(s3_path)`を使用します。  |  ソースとして[DBFS/S3](https://qiita.com/taka_yayoi/items/b1668be2ebb6a7841bd0#%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%95%E3%82%8C%E3%81%9Fjarpython-eggpython-wheel%E3%81%AE%E5%8F%82%E7%85%A7)を選択します。 |  ジョブライブラリに新規`egg`あるいは`whl`オブジェクトを追加し、`package`フィールドとしてS3パスを指定します。 |

### Databricks 無料トライアル

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