Databricksノートブックでコードを開発する

このページでは、オートコンプリート、Python と SQL の自動書式設定、ノートブックでの Python と SQL の組み合わせ、ノートブックのバージョン履歴の追跡など、Databricks ノートブックでコードを開発する方法について説明します。

オートコンプリート、変数選択、マルチカーソルのサポート、サイド バイ サイド差分など、エディターで使用できる高度な機能の詳細については、「 Databricks ノートブックとファイル エディターの操作」を参照してください。

ノートブックまたはファイル エディターを使用する場合、コードの生成、説明、デバッグに役立つ Databricks Assistantを利用できます。 詳細については、「Databricks Assistantを使用する」を参照してください。

Databricks ノートブックには、Python ノートブック用の組み込みの対話型デバッガーも含まれています。 「ノートブックでデバッグする」を参照してください。

コードをモジュール化する

プレビュー

この機能はパブリックプレビュー段階です。

Databricks Runtime 11.3 LTS 以降では、Databricks ワークスペースでソース コード ファイルを作成および管理し、必要に応じてこれらのファイルをノートブックにインポートできます。

ソースコードファイルの操作については、「Databricksノートブック間でのコードの共有」と「PythonおよびRモジュールの操作」を参照してください。

コードセルをフォーマットする

Databricksは、ノートブックのセル内のPythonおよびSQLコードを迅速かつ簡単にフォーマットできるツールを提供しています。これらのツールは、コードのフォーマットを維持するための労力を軽減し、ノートブック全体に同じコーディング標準を適用するのに役立ちます。

Python blackフォーマッタライブラリ

プレビュー

この機能はパブリックプレビュー段階です。

Databricks は、ノートブック内でblackを使用して Python コードの書式設定をサポートします。 ノートブックは、 blackおよびtokenize-rt Python パッケージがインストールされたクラスターに接続されている必要があります。

Databricks Runtime 11.3 LTS 以降では、Databricks によってblacktokenize-rtがプリインストールされます。 これらのライブラリをインストールしなくても、フォーマッタを直接使用できます。

Databricks Runtime 10.4 LTS 以下では、Python フォーマッタを使用するには、ノートブックまたはクラスターに PyPI からblack==22.3.0tokenize-rt==4.2.1をインストールする必要があります。 ノートブックで次のコマンドを実行できます。

%pip install black==22.3.0 tokenize-rt==4.2.1

または、クラスターにライブラリをインストールします。

ライブラリのインストールの詳細については、「 Python 環境管理」を参照してください。

Databricks Git フォルダー内のファイルとノートブックの場合、 pyproject.tomlファイルに基づいて Python フォーマッタを構成できます。 この機能を使用するには、Git フォルダーのルート ディレクトリにpyproject.tomlファイルを作成し、 Black 構成形式に従って構成します。 ファイルの[tool.black]セクションを編集します。 この構成は、Git フォルダー内のファイルやノートブックをフォーマットするときに適用されます。

PythonおよびSQLセルをフォーマットする方法

コードをフォーマットするには、ノートブックに対するCAN EDIT 権限が必要です。

Databricks は、SQL をフォーマットするためにGethue/sql-formatterライブラリを使用し、Python にはブラックコード フォーマッタを使用します。

フォーマッタは、以下の方法でトリガーできます。

  • 1つのセルをフォーマットする

    • キーボードショートカット:Cmd+Shift+Fキーを押します。

    • コマンドコンテキストメニュー:

      • SQLセルのフォーマット: SQLセルのコマンドコンテキストドロップダウンメニューで[ SQLフォーマット ]を選択します。 このメニュー項目は、SQL ノートブックのセルまたは %sql 言語マジックコマンドを持つセルでのみ表示されます。

      • Pythonセルの書式設定: [Python セルのコマンド コンテキスト] ドロップダウン メニューで [ Python の書式設定 ] を選択します。 このメニュー項目は、Python ノートブックのセルまたは %python 言語マジックコマンドを持つセルでのみ表示されます。

    • ノートブックの「編集」メニュー:PythonまたはSQLセルを選択し、「編集」>「セルのフォーマット」を選択します。

  • 複数のセルをフォーマットする

    複数のセルを選択し 、[編集] > [セルの書式設定] を選択します。 複数の言語のセルを選択した場合は、SQL セルと Python セルのみが書式設定されます。 これには、 %sql%pythonを使用するものが含まれます。

  • ノートブック内のすべてのPythonおよびSQLセルをフォーマットする

    「編集」>「ノートブックのフォーマット」を選択します。ノートブックに複数の言語が含まれている場合、SQLセルとPythonセルのみがフォーマットされます。これには、%sql%pythonを使用するものが含まれます。

コードのフォーマットの制限事項

  • Blackは、PEP 8標準の4スペースインデントを採用しています。インデントを構成することはできません。

  • SQL UDF内の埋め込みPython文字列のフォーマットはサポートされていません。同様に、Python UDF内のSQL文字列のフォーマットもサポートされていません。

ノートブックのコード言語

デフォルト言語を設定する

ノートブックのデフォルト言語は、ノートブック名の横に表示されています。

ノートブックのデフォルト言語

デフォルト言語を変更するには、言語ボタンをクリックし、ドロップダウンメニューから新しい言語を選択します。既存のコマンドが引き続き機能することを保証するために、以前のデフォルト言語のコマンドには、言語マジックコマンドが接頭辞として自動的に付与されます。

言語を混在させる

デフォルトでは、セルはノートブックのデフォルト言語を使用します。言語ボタンをクリックし、ドロップダウンメニューから言語を選択することで、セル内のデフォルト言語をオーバーライドできます。

セル言語ドロップダウン

あるいは、セルの先頭で言語マジックコマンド%<language>を使用することもできます。サポートされているマジックコマンドは、%python%r%scala%sqlです。

言語マジック コマンドを呼び出すと、コマンドはノートブックの実行コンテキストの REPL にディスパッチされます。 ある言語 (したがって、その言語の REPL) で定義された変数は、別の言語の REPL では使用できません。 REPL は、DBFS 内のファイルやオブジェクト ストレージ内のオブジェクトなどの外部リソースを介してのみ状態を共有できます。

ノートブックでは、いくつかの補助的なマジックコマンドもサポートされます。

  • %sh:ノートブックでシェルコードを実行できます。シェルコマンドの終了ステータスがゼロ以外の場合にセルを失敗させるには、-eオプションを追加します。このコマンドは、ワーカーではなく、Apache Sparkドライバーでのみ実行されます。すべてのノードでシェルコマンドを実行するには、 initスクリプトを使用します。

  • %fs: dbutils ファイルシステムコマンドを使用できます。 たとえば、 dbutils.fs.ls コマンドを実行してファイルを一覧表示するには、代わりに %fs ls を指定できます。 詳細については、「 Databricks でのファイルの操作」を参照してください。

  • %md:テキスト、画像、数式や方程式など、さまざまなタイプのドキュメントを含めることができます。次のセクションを参照してください。

PythonコマンドにおけるSQL構文のハイライトとオートコンプリート

構文の強調表示と SQL オートコンプリート は、 spark.sql コマンドなどの Python コマンド内で SQL を使用する場合に使用できます。

SQL セルの結果を調べる

Databricks ノートブックでは、SQL 言語セルの結果は、変数 _sqldfに割り当てられた暗黙的な DataFrame として自動的に利用可能になります。 その後、この変数は、ノートブック内の位置に関係なく、後で実行する任意の Python セルと SQL セルで使用できます。

この機能には、次の制限があります。

  • _sqldf変数は、コンピュート用の SQLウェアハウス を使用するノートブックでは使用できません。

  • 後続の Python セルでの _sqldf の使用は、Databricks Runtime 13.3 以降でサポートされています。

  • 後続の SQL セルでの _sqldf の使用は、Databricks Runtime 14.3 以降でのみサポートされています。

  • クエリでキーワード CACHE TABLE または UNCACHE TABLEを使用している場合、 _sqldf 変数は使用できません。

以下のスクリーンショットは、後続の Python セルと SQL セルで _sqldf を使用する方法を示しています:

SQL結果DataFrame

重要

変数 _sqldf は、SQL セルが実行されるたびに再割り当てされます。 特定の DataFrame 結果への参照が失われないようにするには、次の SQL セルを実行する前に、新しい変数名にその結果を割り当てます。

new_dataframe_name = _sqldf
ALTER VIEW _sqldf RENAME TO new_dataframe_name

SQLセルを並列実行する

コマンドの実行中、ノートブックが対話型クラスターにアタッチされている場合、現在のコマンドと同時にSQLセルを実行できます。SQLセルは、新しい並列セッションで実行されます。

セルを並列実行するには、以下を実行します。

  1. セルを実行します。

  2. 今すぐ実行」をクリックします。 セルはすぐに実行されます。

    現在実行中のセルと並行してSQLセルを実行

セルは新しいセッションで実行されるため、一時ビュー、UDF、および 暗黙的な Python DataFrame (_sqldf)は、並列に実行されるセルではサポートされません。 さらに、デフォルトのカタログ名とデータベース名が並列実行中に使用されます。 コードで別のカタログまたはデータベース内のテーブルを参照する場合は、3 レベルの名前空間 (catalog.schema.table) を使用してテーブル名を指定する必要があります。

SQLウェアハウスでSQLセルを実行する

SQLコマンドは、Databricks SQLウェアハウス (SQL アナリティクス用に最適化されたコンピュートの一種) の ノートブックで実行できます。「SQLウェアハウスでノートブックを使用する」を参照してください。