Databricksノートブックでコードを開発する
このページでは、オートコンプリート、Python と SQL の自動書式設定、ノートブックでの Python と SQL の組み合わせ、ノートブックのバージョン履歴の追跡など、Databricks ノートブックでコードを開発する方法について説明します。
オートコンプリート、変数選択、マルチカーソルのサポート、差分の並列表示など、エディタで使用できる高度な機能の詳細については、「Databricksノートブックとファイルエディタを使用する」を参照してください。
ノートブックまたはファイル エディターを使用する場合、コードの生成、説明、デバッグに役立つ Databricks Assistantを利用できます。 詳細については、「Databricks Assistantを使用する」を参照してください。
Databricks ノートブックには、Python ノートブック用の組み込みの対話型デバッガーも含まれています。 「ノートブックでデバッグする」を参照してください。
Databricks Assistant からコーディングのサポートを受ける
Databricks Assistant は、会話型インターフェイスを使用して対話できるコンテキスト認識 AI アシスタントであり、Databricks 内での生産性が向上します。 タスクを英語で説明し、アシスタントに Python コードまたは SQL クエリを生成させ、複雑なコードを説明させ、エラーを自動的に修正させることができます。 アシスタントはUnity Catalogメタデータを使用してテーブル、列、説明、社内全体で人気のあるデータ資産を理解し、パーソナライズされた応答を提供します。
Databricks Assistant は、次のタスクを支援します。
コードを生成します。
エラーの特定と修正の提案を含む、コードをデバッグします。
コードを変換して最適化します。
コードを説明します。
Databricks ドキュメントで関連情報を見つけるのに役立ちます。
Databricks Assistant を使用してより効率的にコードを作成する方法については、 「Databricks Assistant を使用する」を参照してください。 Databricks Assistant の一般的な情報については、「DatabricksIQ を利用した機能」を参照してください。
編集のためにノートブックにアクセスする
ノートブックを開くには、ワークスペースの検索機能を使うか、ワークスペースブラウザを使ってノートブックに移動し、ノートブックの名前またはアイコンをクリックします。
データを閲覧する
スキーマ ブラウザーを使用して、ノートブックで使用できる Unity Catalog オブジェクトを調べます。 ノートブックの左側にある をクリックして、スキーマ ブラウザーを開きます。
[ For you ] ボタンには、現在のセッションで使用したオブジェクト、または以前にお気に入りとしてマークしたオブジェクトのみが表示されます。
[ フィルタ ] ボックスにテキストを入力すると、表示が変わり、入力したテキストを含むオブジェクトのみが表示されます。 現在開いているオブジェクト、または現在のセッションで開かれているオブジェクトのみが表示されます。 フィルターボックスでは、ノートブックで使用可能なカタログ、スキーマ、テーブル、ボリュームの完全な検索は実行されません。
ケバブメニューを開くには、次のようにオブジェクトの名前の上にカーソルを置きます。
オブジェクトがテーブルの場合は、次の操作を実行できます。
セルを自動的に作成して実行し、テーブル内のデータのプレビューを表示します。テーブルのケバブメニューから「新しいセルでプレビュー」を選択します。
カタログエクスプローラでカタログ、スキーマ、またはテーブルを表示します。 ケバブメニューから「 カタログエクスプローラで開く」(Open in Catalog Explorer ) を選択します。 選択したオブジェクトを表示する新しいタブが開きます。
カタログ、スキーマ、またはテーブルへのパスを取得します。 [ コピー...] を選択します。 オブジェクトのケバブメニューからのパス。
テーブルを [お気に入り] に追加します。 テーブルのケバブメニューから[ お気に入りに追加] を選択します。
オブジェクトがカタログ、スキーマ、またはボリュームの場合は、オブジェクトのパスをコピーするか、「カタログエクスプローラ」(Catalog Explorer) で開くことができます。
テーブル名または列名をセルに直接挿入するには、以下を実行します。
名前を入力したい場所のセルでカーソルをクリックします。
スキーマブラウザでテーブル名または列名の上にカーソルを移動します。
オブジェクト名の右側に表示される二重矢印 をクリックします。
キーボードショートカット
キーボードショートカットを表示するには、「ヘルプ」>「キーボードショートカット」を選択します。使用できるキーボードショートカットは、カーソルがコードセルにあるか(編集モード)、そうでないか(コマンドモード)によって異なります。
コマンドパレット
コマンド パレットを使用すると、ノートブック内でアクションをすばやく実行できます。 ノートブックアクションのパネルを開くには、ワークスペースの右下隅にある をクリックするか、MacOS ではショートカットCmd + Shift + P 、Windows ではCtrl + Shift + Pを使用します。
テキストの検索と置換
ノートブック内のテキストを検索して置換するには、「編集」>「検索と置換」を選択します。現在選択されている一致はオレンジ色でハイライトされ、他のすべての一致は黄色でハイライトされます。
現在選択されている一致を置き換えるには、「置換」をクリックします。ノートブック内の一致をすべて置換するには、「すべて置換」をクリックします。
一致の間を移動するには、「前へ」ボタンと「次へ」ボタンをクリックします。また、Shift+Enterキーを押して前の一致へ、Enterキーを押して次の一致へ移動することもできます。
検索と置換ツールを閉じるには、をクリックする か、 Esc キーを押します。
選択したセルを実行する
単一のセルまたはセルのコレクションを実行できます。 1 つのセルを選択するには、セル内の任意の場所をクリックします。 複数のセルを選択するには、MacOS では Command
キー、Windows では Ctrl
キーを押したまま、スクリーン ショットに示すように、テキスト領域の外側のセルをクリックします。
選択したものを実行するには、このコマンドの動作は、ノートブックが接続されているクラスターによって異なります。
Databricks Runtime 13.3 LTS 以下を実行しているクラスタでは、選択したセル個別に実行されます。 セルでエラーが発生した場合、後続のセルで実行が続行されます。
Databricks Runtime 14.0以降を実行しているクラスター、またはSQLウェアハウスでは、選択したセルがバッチとして実行されます。エラーが発生すると実行が停止し、個々のセルの実行をキャンセルすることはできません。 [割り込み] ボタンを使用して、すべてのセルの実行を停止できます。
コードをモジュール化する
プレビュー
この機能はパブリックプレビュー段階です。
Databricks Runtime 11.3 LTS 以降では、Databricks ワークスペースでソース コード ファイルを作成および管理し、必要に応じてこれらのファイルをノートブックにインポートできます。
ソースコードファイルの操作については、「Databricksノートブック間でのコードの共有」と「PythonおよびRモジュールの操作」を参照してください。
選択したテキストを実行
ノートブックのセル内のコードまたはSQLステートメントをハイライトして、その選択部分のみを実行することができます。これは、コードやクエリーをすばやく反復処理したい場合に便利です。
実行する行をハイライトします。
「実行」>「選択したテキストを実行」を選択するか、キーボードショートカット
Ctrl
+Shift
+Enter
キーを使用します。テキストがハイライトされていない場合、「選択したテキストを実行 」を使用すると、現在の行が実行されます。
セルで混合言語を使用している場合は、選択範囲に %<language>
行を含める必要があります。
ハイライトされた選択範囲に折りたたまれたコードがある場合、「選択したテキストを実行」を使用すると、それも実行されます。
%run
、%pip
、%sh
などの特殊なセルコマンドがサポートされています。
複数の出力タブがあるセル(つまり、データプロファイルまたはビジュアライゼーションを定義しているセル)では、「選択したテキストを実行」を使用することはできません。
コードセルをフォーマットする
Databricksは、ノートブックのセル内のPythonおよびSQLコードを迅速かつ簡単にフォーマットできるツールを提供しています。これらのツールは、コードのフォーマットを維持するための労力を軽減し、ノートブック全体に同じコーディング標準を適用するのに役立ちます。
Python blackフォーマッタライブラリ
プレビュー
この機能はパブリックプレビュー段階です。
Databricks は、ノートブック内でblackを使用して Python コードの書式設定をサポートします。 ノートブックは、 black
およびtokenize-rt
Python パッケージがインストールされたクラスターに接続されている必要があります。
Databricks Runtime 11.3 LTS 以降では、Databricks によってblack
とtokenize-rt
がプリインストールされます。 これらのライブラリをインストールしなくても、フォーマッタを直接使用できます。
Databricks Runtime 10.4 LTS 以下では、Python フォーマッタを使用するには、ノートブックまたはクラスターに PyPI からblack==22.3.0
とtokenize-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文字列のフォーマットもサポートされていません。
バージョン履歴
Databricksノートブックはノートブックのバージョンの履歴を保持しているため、ノートブックの以前のスナップショットを表示および復元できます。バージョンに対して以下のアクションを実行できます:コメントの追加、バージョンの復元と削除、バージョン履歴の消去。
Databricksでの作業をリモートGitリポジトリと同期することもできます。
ノートブックのバージョンにアクセスするには、右側のサイドバーのをクリックします 。 ノートブックのバージョン履歴が表示されます。 [ ファイル] > [バージョン履歴] を選択することもできます。
コメントを追加する
最新バージョンにコメントを追加するには、以下を実行します。
バージョンをクリックします。
「今すぐ保存」をクリックします。
「ノートブック・バージョンの保存」ダイアログで、コメントを入力します。
「保存」をクリックします。ノートブックのバージョンが、入力したコメントと共に保存されます。
バージョンを復元する
バージョンを復元するには、以下を実行します。
バージョンをクリックします。
[ このバージョンを復元] をクリックします。
「確認」をクリックします。選択したバージョンがノートブックの最新バージョンになります。
ノートブックのコード言語
デフォルト言語を設定する
ノートブックのデフォルト言語は、ノートブック名の横に表示されています。
デフォルト言語を変更するには、言語ボタンをクリックし、ドロップダウンメニューから新しい言語を選択します。既存のコマンドが引き続き機能することを保証するために、以前のデフォルト言語のコマンドには、言語マジックコマンドが接頭辞として自動的に付与されます。
言語を混在させる
デフォルトでは、セルはノートブックのデフォルト言語を使用します。言語ボタンをクリックし、ドロップダウンメニューから言語を選択することで、セル内のデフォルト言語をオーバーライドできます。
あるいは、セルの先頭で言語マジックコマンド%<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
を使用する方法を示しています:
重要
変数 _sqldf
は、SQL セルが実行されるたびに再割り当てされます。 特定の DataFrame 結果への参照が失われないようにするには、次の SQL セルを実行する前に、新しい変数名にその結果を割り当てます。
new_dataframe_name = _sqldf
ALTER VIEW _sqldf RENAME TO new_dataframe_name
SQLセルを並列実行する
コマンドの実行中、ノートブックが対話型クラスターにアタッチされている場合、現在のコマンドと同時にSQLセルを実行できます。SQLセルは、新しい並列セッションで実行されます。
セルを並列実行するには、以下を実行します。
セルを実行します。
「今すぐ実行」をクリックします。 セルはすぐに実行されます。
セルは新しいセッションで実行されるため、一時ビュー、UDF、および 暗黙的な Python DataFrame (_sqldf
)は、並列に実行されるセルではサポートされません。 さらに、デフォルトのカタログ名とデータベース名が並列実行中に使用されます。 コードで別のカタログまたはデータベース内のテーブルを参照する場合は、3 レベルの名前空間 (catalog
.schema
.table
) を使用してテーブル名を指定する必要があります。
SQLウェアハウスでSQLセルを実行する
SQLコマンドは、Databricks SQLウェアハウス (SQL アナリティクス用に最適化されたコンピュートの一種) の ノートブックで実行できます。「SQLウェアハウスでノートブックを使用する」を参照してください。
画像を表示する
Databricks は、Markdown セルでの画像の表示をサポートしています。 ワークスペース、ボリューム、またはファイルストアに保存されているイメージを表示できます。
ワークスペースに保存されている画像を表示する
ワークスペースに保存されている画像を表示するには、絶対パスまたは相対パスのいずれかを使用できます。 ワークスペースに保存されている画像を表示するには、次の構文を使用します。
%md
![my_test_image](/Workspace/absolute/path/to/image.png)
![my_test_image](./relative/path/to/image.png)
ボリュームに保存された画像を表示する
絶対パスを使用して、ボリュームに格納された画像を表示できます。 ボリュームに格納されたイメージを表示するには、次の構文を使用します。
%md
![my_test_image](/Volumes/absolute/path/to/image.png)
FileStoreに保存された画像を表示する
ファイルストアに保存されている画像を表示するには、次の構文を使用します。
%md
![my_test_image](files/image.png)
たとえば、FileStoreにDatabricksのロゴ画像ファイルがあるとします。
dbfs ls dbfs:/FileStore/
databricks-logo-mobile.png
Markdownセルに以下のコードを入力すると、以下のようになります。
セルに画像がレンダリングされます。
数式を表示する
ノートブックでは、数式や方程式を表示するために、KaTeXをサポートしています。例えば
%md
\\(c = \\pm\\sqrt{a^2 + b^2} \\)
\\(A{_i}{_j}=B{_i}{_j}\\)
$$c = \\pm\\sqrt{a^2 + b^2}$$
\\[A{_i}{_j}=B{_i}{_j}\\]
上記のように記述すると、以下のように表示されます。
と
%md
\\( f(\beta)= -Y_t^T X_t \beta + \sum log( 1+{e}^{X_t\bullet\beta}) + \frac{1}{2}\delta^t S_t^{-1}\delta\\)
where \\(\delta=(\beta - \mu_{t-1})\\)
上記のように記述すると、以下のように表示されます。
HTMLを含める
関数displayHTML
を使用すると、ノートブックにHTMLを含めることができます。この方法の例については、「ノートブック内のHTML、D3、SVG」を参照してください。
注
displayHTML
のiframeはドメインdatabricksusercontent.com
から提供されており、iframeサンドボックスには allow-same-origin
属性が含まれています。ブラウザからdatabricksusercontent.com
にアクセスできる必要があります。現在、このドメインが企業ネットワークによってブロックされている場合は、許可リストに追加する必要があります。
他のノートブックへのリンク
相対パスを使用して、Markdownセル内で他のノートブックまたはフォルダにリンクできます。href
アンカータグの属性を相対パスとして指定します。この相対パスは、$
で始まり、Unixファイルシステムと同じパターンに従います。
%md
<a href="$./myNotebook">Link to notebook in same folder as current notebook</a>
<a href="$../myFolder">Link to folder in parent folder of current notebook</a>
<a href="$./myFolder2/myNotebook2">Link to nested notebook</a>