Databricks for Python developers | Databricks on AWS [2022/11/3時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
本書では、Python言語を用いたDatabricksにおけるノートブックやジョブの開発に対するガイドを提供します。最初のサブセクションでは、一般的なワークフローやタスクに関するチュートリアルへのリンクを提供します。二つ目のサブセクションでは、API、ライブラリ、キーとなるツールへのリンクを提供します。
スタートする際の基本的なワークフローは以下となります。
- コードのインポート: ファイルやGitリポジトリからご自身のコードをインポートするか、以下に示すチュートリアルをトライします。インタラクティブなDatabricksノートブックを用いて学習を行うことをお勧めします。
- クラスターにおけるコードの実行: ご自身でクラスターを作成するか、共有クラスターを使用する権限を持っていることを確認します。ノートブックをクラスターにアタッチし、ノートブックを実行します。
- さらに、より固有のトピックに分岐することができます。
- Apache Sparkを用いてより大規模なデータセットを操作する。
- ビジュアライゼーションの追加
- ジョブとしてワークロードを自動化。
- データを分析するために機械学習を活用。
- IDEによる開発
チュートリアル
以下のチュートリアルでは、一般的なワークフローを学ぶためのサンプルコードとノートブックを提供しています。ワークスペースにサンプルノートブックをインポートする手順に関しては、ノートブックのインポートをご覧ください。
インタラクティブなデータサイエンスと機械学習
- データオペレーションと分析のためにApache Sparkデータフレームを使い始めます: チュートリアル:DatabricksでPySparkデータフレームを操作する
- チュートリアル: Databricksにおける機械学習モデル構築のエンドツーエンドのサンプル。その他のサンプルに関しては、Tutorials: Get started with MLとMLflowガイドのQuickstart Pythonをご覧ください。
- Databricks AutoMLを用いることで、お使いのデータセットに対する機械学習モデルの開発をクイックにスタートすることができます。Databricks AutoMLのガラスボックスアプローチによって、クローン、修正、再実行できる完全な機械学習ワークフローを含むノートブックを生成します。
データエンジニアリング
- チュートリアル:DatabricksでPySparkデータフレームを操作するでは、データ準備と分析のために使うApache Sparkデータフレームに関して学ぶ役に立つウォークスルーを提供しています。
- Tutorial: Delta Lake
- Delta Live Tablesクイックスタートは、高信頼データパイプラインを構築、管理するためのDelta Live TablesのウォークスルーとPythonのサンプルを提供しています。
プロダクションの機械学習と機械学習オペレーション
Pythonノートブックのデバッグ
以下のサンプルノートブックでは、DatabrikcksノートブックでPythonデバッガー(pdb)をどの様に使うのかを説明しています。Pythonデバッガーを使うには、Databricksランタイム11.2以降が必要となります。
Pythonデバッガーサンプルノートブック
注意
breakpoint()
はIPythonでサポートされておらず、Databricksノートブックでは動作しません。breakpoint()
の代わりにimport pdb; pdb.set_trace()
を使うことができます。
リファレンス
以降のサブセクションでは、DatabricksでPythonを用いた開発を始める際に役立つキーの機能とティップスを説明しています。
Python API
Databricksの外で動作するPythonコードは、通常はDatabricks内で実行することができ、逆もまた然りです。既存コードがあるのであれば、スタートするにはDatabricksにインポートするだけです。詳細に関しては、ノートブックとDatabricks Reposによるコード管理をご覧ください。
Databricksは、シングルマシンと分散Pythonワークロードの両方で実行することができます。シングルマシンの処理においては、通常通りPython APIとライブラリを使用することができます。例えば、pandasやscikit-learnは「普通に動作します」。分散Pythonワークロードに関しては、Databricksはすぐに利用できる2つの人気のあるAPIを提供します。Pandas API on SparkとPySparkです。
SparkにおけるPandas API
注意
Koalasオープンソースプロジェクトでは、Pandas API on Sparkに切り替えることを推奨しています。Pandas API on SparkはDatabricks Runtime 10.0 (Unsupported)以降で使用することができます。Databricks Runtime 9.1 LTS以前が実行されているクラスターにおいては、代わりにKoalasを使ってください。
pandasは、データ分析やデータ操作を行うデータサイエンティストで広く使われているPythonパッケージです。しかし、pandasはビッグデータに対してスケールしません。Pandas API on Sparkは、Apache Spark上で動作するpandasと同等のAPIを提供することでこのギャップを埋めます。このオープンソースのAPIは、pandasには慣れているがApache Sparkには慣れていないデータサイエンティストにとっては理想的な選択肢となります。
PySpark API
PySparkはApache Sparkに対する公式のPython APIです。このAPIはPandas API on Sparkよりも優れた柔軟性を提供します。
ノートブックとDatabricks Reposによるコード管理
DatabricksノートブックはPythonをサポートしています。これらのノートブックはJupyterと同じ様な機能を提供しますが、ビッグデータを用いたビルトインのビジュアライゼーション、デバッグやパフォーマンス監視のためのApache Sparkインテグレーション、機械学習エクスペリメントのトラッキングのためのMLflowインテグレーションのような機能が追加されています。ノートブックをインポートすることから始めましょう。クラスターへのアクセス権を得たら、クラスターにノートブックをアタッチし、ノートブックを実行します。
ティップス
ノートブックの状態を完全にリセットするには、iPythonカーネルを再起動することが有用です。Jupyterのユーザーにとっての、Jupyterの「カーネルの再起動」オプションは、Databrikcsにおけるノートブックのデタッチ、再アタッチに該当します。Pythonノートブックでカーネルを再起動するには、左上のクラスタードロップダウンをクリックし、Detach & Re-attachをクリックします。これによって、ノートブックがクラスターからデタッチ・再アタッチされ、Pythonプロセスが再起動します。
Databricks Reposを用いることで、ユーザーはノートブックや他のファイルをGitリポジトリと同期できる様になります。Databricks Reposはコードのバージョン管理やコラボレーションの役に立ち、コードのすべてのリポジトリのDatabricksへのインポート、過去のノートブックのバージョンの参照、IDE開発とのインテグレーションをシンプルにします。リモートGitリポジトリのクローンからスタートしましょう。リポジトリクローンでノートブックをオープンするか作成し、クラスターにノートブックをアタッチし、ノートブックを実行します。
クラスターとライブラリ
Databricksクラスターは、シングルノードクラスターから大規模クラスターに至る任意のサイズでのクラスターの計算資源の管理を行います。必要に応じてクラスターのハードウェアやライブラリをカスタマイズすることができます。通常データサイエンティストは、クラスターを作成するか既存の共有クラスターを使用するところから作業を開始します。クラスターにアクセスできる様になったら、クラスターにノートブックをアタッチし、クラスターでジョブを実行します。
- シングルノードのみを必要とする小規模なワークロードにおいては、データサイエンティストはコストを節約するためにシングルノードクラスターを活用することができます。
- 詳細なティップスについては、Databricksクラスター設定のベストプラクティスをご覧ください。
- 管理者は、クラスター作成をシンプルにしガイドするためにクラスターポリシーをセットアップすることができます。
Databricksクラスターは、Apache Spark、Delta Lake、pandasを含む人気のある数多くのライブラリをすぐに利用できる様にこれらを提供するDatabricksランタイムを使用します。また、ノートブックやジョブで使用できる様に追加のサードパーティライブラリやカスタムPythonライブラリをインストールすることができます。
- Databricksランタイムのデフォルトライブラリからスタートします。機械学習ワークロードにはDatabricks機械学習ランタイムを使用します。事前インストールされているライブラリの完全な一覧に関しては、Databricks runtime releasesをご覧ください。
- PyPIや他のリポジトリにあるライブラリを用いてノートブックやジョブの環境を変更することができる、ノートブックスコープPythonライブラリを用いて環境をカスタマイズします。
%pip install my_library
マジックコマンドは、あなたが現在アタッチしているクラスターのすべてのノードにmy_library
をインストールしますが、共有クラスターの他のワークロードには干渉しません。 - 必要に応じて非Pythonのライブラリをクラスターライブラリとしてインストールします。
- 詳細に関しては、ライブラリをご覧ください。
ビジュアライゼーション
DatabricksのPythonノートブックには様々なタイプのビジュアライゼーションのビルトインサポートがあります。また、レガシーなビジュアライゼーションを使うこともできます。
また、サードバーティライブラリを使ってデータを可視化することができます。いくつかはDatabricksランタイムに事前インストールされていますが、カスタムライブラリをインストールすることもできます。有名な選択肢には以下の様なものがあります。
ジョブ
Databricksジョブを用いることで、Pythonワークロードをスケジューリングあるいは起動することができます。ジョブでは、ノートブック、Pythonスクリプト、Python wheelsを実行することができます。
- UIからのジョブ作成方法については、ジョブの作成をご覧ください。
- Jobs API 2.1を用いて、ジョブの作成、編集、削除が可能です。
- Jobs CLIを用いることで、Jobs APIを呼び出すための便利なコマンドラインインタフェースを使用することができます。
ティップス
ノートブックではなくPythonスクリプトをスケジューリングする際、create jobのリクエストボディのtasks
の下のspark_python_task
フィールドを使用します。
機械学習
Databricksでは、表形式データに対する従来の機械学習(ML)、コンピュータービジョンに対するディープラーニング、自然言語処理、レコメンデーションシステム、グラフ解析などを含むさまざまな機械学習ワークロードをサポートしています。Databricksにおける機械学習の一般的な情報については、Databricks機械学習ガイドをご覧ください。
MLアルゴリズムに関しては、scikit-learn、TensorFlow、Keras、PyTorch、Apache Spark MLlib、XGBoostのような人気のあるPythonツールを含むDatabricks機械学習ランタイムに事前インストールされているライブラリを使うことができます。カスタムライブラリをインストールすることもできます。
機械学習オペレーション(MLOps)に関しては、DatabricksではオープンソースライブラリであるMLflowのマネージドサービスを提供しています。MLflowトラッキングを用いることで、モデルの開発を記録し、再利用なフォーマットでモデルを保存することができます。MLflowモデルレジストリを用いることで、モデルのプロダクションへのプロモートを管理、自動化することができます。そして、ジョブとサーバレスリアルタイム推論によるモデルサービングや、クラシックMLflowモデルサービングを用いることで、バッチやストリーミングジョブ、RESTエンドポイントとしてモデルをホストすることができます。詳細とサンプルに関しては、Databricks MLflowガイドやMLflow Python API docsをご覧ください。
一般的な機械学習ワークロードをスタートするには、以下のページを参照ください。
- MLflowによるscikit-learnのトレーニングとトラッキング: 10分チュートリアル: scikit-learnを用いたDatabricksにおける機械学習
- ディープラーニングモデルのトレーニング: Deep learning
- ハイパーパラメーターチューニング: Parallelize hyperparameter tuning with scikit-learn and MLflow
- グラフ解析: GraphFrames user guide - Python
IDE、開発ツール、API
DatabricksノートブックでPythonコードを開発することに加え、PyCharm、Jupyter、Visual Studio Codeのような外部の統合開発環境(IDE)を用いて開発を行うことができます。外部の開発環境とDatabrikcsの間で成果物を同期するにはいくつかの選択肢があります。
- コード: Gitを用いてコードを同期することができます。Databricks ReposによるGit連携をご覧ください。
- ライブラリとジョブ: 外部で(wheelsのような)ライブラリを作成し、Databricksにアップロードすることができます。これらのライブラリは、Databricksノートブックでインポートすることができ、ジョブ作成に使用することもできます。Databricksにおけるライブラリ管理やDatabricksにおけるジョブ管理をご覧ください。
- リモードマシンでの実行: インタラクティブな開発やテストのためにローカルのIDEからコードを実行することができます。IDEはDatabricksクラスターで大規模な計算処理を実行するために、Databricksとコミュニケーションすることができます。この接続を生成するためにどの様にDatabricks Connectを使うのかを学ぶには、Use IDEs with Databricksをご覧ください。
Databricksでは、自動化と外部のツールとの連携をサポートするREST APIの完全なセットを提供しています。クラスター、ライブラリ、コードや他のワークスペースオブジェクト、ワークロードやジョブの様なリソースを管理するためにAPIを活用することができます。REST API (latest)をご覧ください。
IDE、開発ツール、APIの詳細については、Developer tools and guidanceをご覧下さい。
その他のリソース
- Databricks Academyでは、数多くのトピックに対するセルフペース、インストラクター指導のコースを提供しています。
- PySparkとpandasの相互運用性をサポートする機能
- PythonとSQLデータベースの接続性
- Databricks SQL Connector for Pythonを用いることで、Databricksリソース上でSQLコマンドを実行するためにPythonコードを使用することができます。
- pyodbcを用いることで、ローカルのPythonコードからODBCを通じて、Databricksレイクハウスに格納されているデータに接続することができます。
- PythonワークロードをDatabricksに移行するためのFAQとティップス