LoginSignup
3
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-04-11

Develop code in Databricks notebooks | Databricks on AWS [2023/6/1時点]の翻訳です。

Databricksクイックスタートガイドのコンテンツです。

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

このページでは、オートコンプリート、PythonやSQLにおけるオートフォーマット、ノートブックにおけるPythonとSQLの組み合わせ、ノートブックバージョン履歴を含む、Databricksノートブックにおけるコードの開発方法を説明します。

エディタで利用できるオートコンプリート、変数選択、マルチカーソル、隣り合わせのdiffなどの高度な機能の詳細については、Use the Databricks notebook and file editorをご覧ください。

編集するためにノートブックにアクセス

ノートブックを開くには、ワークスペースの検索機能、あるいはノートブックまでナビゲートするためにワークスペースブラウザを使用し、ノーブック名やアイコンをクリックします。

データのブラウズ

プレビュー
本機能はパブリックプレビューです。

ノートブックから利用できるテーブルやボリュームを探索するためにスキーマブラウザを活用します。スキーマブラウザを開くにはノートブックの左にあるをクリックします。

For youボタンは、現在のセッションで使用したテーブルやボリューム、以前Favoriteにマークしたもののみを表示します。

Filterボックスにテキストをタイプすると、タイプしたテキストを含むアイテムのみを表示します。現在オープンしている、現在のsrっションでオープンしたアイテムのみが表示されます。Filterボックスは、ノートブックで利用できる、カタログ、スキーマ、テーブル、ボリュームの完全な検索を行いません。

ケバブメニューを開くには、アイテム名が表示されている部分にカーソルを移動します:

アイテムがテーブルの場合、以下のことを行うことができます:

  • テーブルのデータをプレビューするために自動でセルを作成し実行します。テーブルのケバブメニューからPreview in a new cellを選択します。
  • データエクスプローラでカタログ、スキーマ、テーブルを参照します。ケバブメニューからOpen in Data Explorerを選択します。選択したアイテムを表示する新規タブが開きます。
  • カタログ、スキーマ、テーブルのパスを取得します。アイテムのケバブメニューからCopy … pathを選択します。
  • テーブルをFavoritesに追加します。テーブルのケバブメニューでAdd table to favoritesを選択します。

アイテムがカタログやスキーマの場合、アイテムのパスをコピーしたり、データエクスプローラで開くことができます。

セルにテーブル名やカラム名を直接インサートするには:

  1. セルで名前を入力したい場所でカーソルをクリックします。
  2. スキーマブラウザでテーブル名やカラム名の上にカーソルを移動します。
  3. アイテム名の右に表示される二重矢印をクリックします。

キーボードショートカット

キーボードショートカットを表示するには、Help > Keyboard shortcutsを選択します。利用できるキーボードショートカットは、コードセルにカーソルがある場合(編集モード)とそうではない場合(コマンドモード)とで変化します。

テキストの検索、置換

ノートブック内のテキストを検索、置換するには、Edit > Find and Replaceを選択します。マッチ結果の現在地点はオレンジでハイライトされ、他のマッチは黄色でハイライトされます。

現在のマッチを置換するには、Replaceをクリックします。ノートブックのすべてのマッチ結果を置換するにはReplace Allをクリックします。

マッチ間を移動するには、PrevNextボタンをクリックします。また、前のマッチに移動するにはshift+enter、次のマッチに移動するにはenterを押すこともできます。

検索、置換ツールを閉じるには、をクリックするか、escを押します。

変数エクスプローラ

Databricksランタイム12.1以降では、ノートブックUIで直接現在のPython変数を観察することができます。

変数エクスプローラを開くには、右側のサイドバーをgクリックします。変数エクスプローラが開き、ノートブックで現在定義されている変数ごとに、値、データ型、形状を表示します(PySparkデータフレームの形状計算にはコストがかかることがあるため、PySparkの形状は?と表示されます)。

表示をフィルタリングするには、検索ボックスにテキストを入力します。タイプすると自動でフィルタリングされます。

変数の値は、ノートブックセルを実行する度に自動でアップデートされます。

コードのモジュール化

プレビュー
本機能はパブリックプレビューです。

Databricksランタイム11.2以降では、Databricksワークスペースでソースコードファイルを作成、管理することができ、必要に応じてノートブックにこれらのファイルをインポートすることができます。

ソースコードファイル操作の詳細については、Share code between Databricks notebooksWork with Python and R modulesをご覧ください。

選択テキストの実行

ノートブックセルのコードやSQL文をハイライトし、その選択箇所のみを実行することができます。これは、コードやクエリーをクイックに繰り返したい場合には有用です。

  1. 実行したい行をハイライトします。
  2. Run > Run selected textを選択するか、キーボードショートカットCtrl+Shift+Enterを使用します。テキストがハイライトされていない場合、Run Selected Textは現在の行を実行します。

セルでミックス言語を使用している場合、選択範囲に%<language>を含める必要があります。

また、Run selected textは、ハイライトされた箇所に含まれる折り畳まれたコードも実行します。

%run%pip%shのような特殊なセルコマンドもサポートされています。

選択テキスト実行の制限

複数の出力タブを持つセル(データプロファイルやビジュアライゼーションを定義しているセル)でRun selected textを実行することはできません。

新たなノートブックエディタを使用していない場合、Run selected textは編集モード(カーソルがコードセルにある場合)でのみ動作します。カーソルが選択テキストのセルの外にある場合、Run selected textは動作しません。この制限を回避するには、新たなノートブックエディタを有効化してください。

コードセルのフォーマット

DatabricksではノートブックのセルにあるPython、SQL
コードをクイックかつ簡単にフォーマットできるツールを提供しています。これらのツールは、コードをフォーマットされた状態に保つ労力を削減し、ノートブックに対して同じコード基準を強制する助けになります。

Pythonセルのフォーマット

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

Databricksランタイム11.2以降、DatabricksではノートブックのコードのフォーマットにBlackを使用します。ノートブックをクラスターにアタッチする必要があり、ノートブックがアタッチされたクラスターでBlackが実行されます。

PythonとSQLセルのフォーマット方法

コードをフォーマットするにはノートブックに対するCan Edit権限が必要となります。

以下の方法でフォーマッターを起動することができます:

  • 単一セルのフォーマット

    • キーボードショートカット: Cmd+Shift+F
    • コマンドコンテキストメニュー:
      • SQLセルのフォーマット: SQLセルのコマンドコンテキストドロップダウンメニューでFormat SQLを選択。このメニューアイテムはSQLノートブックのセルか言語マジック%sqlのセルでのみ表示されます。
      • Pythonセルのフォーマット: PythonセルのコマンドコンテキストドロップダウンメニューでFormat Pythonを選択。このメニューアイテムはPythonノートブックのセルか言語マジック%pythonのセルでのみ表示されます。
    • ノートブックのEditメニュー: PythonセルかSQLセルを選択し、Edit > Format Cell(s) を選択。
  • 複数セルのフォーマット

    複数のセルを選択し、Edit > Format Cell(s) を選択します。2つ以上の言語を含むセルを選択した場合、SQLとPythonのセルのみがフォーマットされます。これには%sql%pythonを使用しているものも含まれます。

  • ノートブックのすべてのPython、SQLセルのフォーマット

    Edit > Format Notebookを選択します。ノートブックに2つ以上の言語が含まれている場合、SQLとPythonのセルのみがフォーマットされます。これには%sql%pythonを使用しているものも含まれます。

コードフォーマッティングの制限

  • BlackはPEP 8の4スペースのインデントを強制します。インデントを設定することはできません。
  • SQL UDF内に埋め込まれたPython文字列のフォーマットはサポートされていません。同様に、Python UDF内のSQL文字列のフォーマットもサポートされていません。

バージョン履歴

Databricksノートブックはバージョン履歴を保持するので、以前のノートブックのスナップショットを参照、復旧することができます。バージョンに対して以下の操作を行うことができます: コメントの追加、バージョンの復旧と削除、バージョン履歴のクリア。

また、リモートGitリポジトリとDatabricksで成果物を同期することができます。

ノートブックのバージョンにアクセスするには、ツールバーのLast edit…メッセージをクリックします。ブラウザの右側にノートブックのバージョンが表示されます。また、File > Version historyを選択することもできます。

コメントの追加

最新バージョンにコメントを追加するには:

  1. バージョンをクリック
  2. Save nowリンクをクリック
  3. ノートブックバージョン保存ダイアログでコメントを入力
  4. Saveをクリック。ノートブックのバージョンはコメントとともに保存されます。

バージョンの復旧

バージョンを復旧するには、

  1. バージョンをクリック
  2. Restore this revisionをクリック
  3. Confirmをクリック。選択されたバージョンが最新バージョンになります。

バージョンの削除

特定のバージョンを削除するには、

  1. バージョンをクリック
  2. ゴミ箱アイコンをクリック
  3. Yes, eraseをクリック。選択されたバージョンはバージョン履歴から削除されます。

バージョン履歴のクリア

バージョン履歴をクリアするには、

  1. File > Clear Revision Historyを選択します。
  2. Yes, clearをクリックします。バージョン履歴がクリアされます。

ノートブックにおけるコードの言語

デフォルト言語の設定

ノートブックのデフォルト言語は、ノートブック名の隣にあるボタンに表示されます。

デフォルト言語を変更するには、言語ボタンをクリックし、ドロップダウンメニューから新たな言語を選択します。既存のコマンドが動作し続けるように、以前のデフォルト言語のコマンドは自動で言語マジックコマンドが追加されます。

ミックス言語

デフォルトでは、セルはノートブックのデフォルト言語を使用します。言語ボタンをクリックし、ドロップダウンから言語を選択することで、セルのデフォルト言語を上書きすることができます。

あるいは、セルの先頭に言語マジックコマンド%<language>を指定することで、デフォルト言語を上書きすることができます。サポートされているマジックコマンドは、%python%r%scalaそして%sqlです。

注意
言語マジックコマンドを実行する際、コマンドはノートブックに対応する実行コンテキストのREPLにディスパッチされます。ある一つの言語で定義される(その言語に対応するREPLに存在する)変数は他の言語のREPLでは使用できません。REPL間では、DBFS上のファイルやオブジェクトストレージ上のオブジェクトのような外部リソースを通じて状態を共有できます。

また、ノートブックはこの他に以下の補助マジックコマンドをサポートしています:

  • %sh: ノートブック上でシェルコードを実行できます。シェルコマンドが非ゼロのexit statusを持つ場合にセルでエラーを発生させる場合には、-eオプションを追加します。 このコマンドはApache Sparkのドライバーノードでのみ実行されます。ワーカーノードでは実行されません。全てのノードでシェルコマンドを実行するには、init scriptを使用します。
  • %fs: dbutilsファイルシステムコマンドを実行できます。詳細はHow to work with files on Databricksを参照ください。
  • %md: テキスト、画像、数式などと言った様々なドキュメンテーションを行うことができます。詳細は次のセクションを参照ください。

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

spark.sqlのようなPythonコマンドの中でSQLを使用する際、SQLのハイライトとオートコンプリートを利用することができます。

PythonノートブックにおけるPythonをネイティブに用いたSQLセル結果の探索

SQLを用いてデータをロードし、Pythonを用いて結果を探索したいと思うかもしれません。DatabricksのPythonノートブックでは、SQL言語セルから得られるテーブルの結果は、自動的にPythonデータフレームとして利用できるようになります。Pythonデータフレームの名前は_sqldfとなります。

注意

  • Pythonノートブックでは、_sqldfは自動で保存されずSQLセルの最新の実行結果で置き換えられます。データフレームを保存するには、Pythonセルで以下のコードを実行します。
Python
new_dataframe_name = _sqldf
  • クエリーでウィジェットのパラメータ化を使用している場合、結果をPythonデータフレームとして利用することはできません。
  • クエリーでCACHE TABLEUNCACHE TABLEを使用している場合、結果をPythonデータフレームとして利用することはできません。

以下にサンプルのスクリーンショットを示します。

SQLセルを並列で実行

インタラクティブクラスターにアタッチされているノートブックでコマンドが実行されている際、現在のコマンドと同時にSQLセルを実行することができます。SQLセルは新規で並列のセッションで実行されます。

セルを並列に実行するには:

  1. セルを実行します。
  2. Run Nowをクリックします。セルは即座に実行されます。

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

SQLウェアハウスでSQLを実行

プレビュー
本機能はパブリックプレビューです。

SQL分析に最適化された計算資源であるSQLウェアハウスでDatabricksノートブックのSQLコマンドを実行することができます。SQLウェアハウスでノートブックを使うをご覧ください。

画像の表示

FileStoreに格納されている画像を表示するには以下の構文を使用します。

Markdown
%md
![test](files/image.png)

例えば、FileStoreにDatabricksロゴの画像ファイルを格納しているとします。

Bash
dbfs ls dbfs:/FileStore/
databricks-logo-mobile.png

マークダウンのセルに以下のコードを追加すると:

セルに画像がレンダリングされます:

数式の表示

ノートブックは数式を表示するために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を含めることができます。サンプルはDatabricksノートブックにおけるHTML、D3、SVGの活用を参照ください。

注意
displayHTMLのiframeはドメインdatabricksusercontent.comから提供され、iframeサンドボックスはallow-same-origin属性を含んでいます。あなたのブラウザーからdatabricksusercontent.comにアクセスできる必要があります。企業ネットワークでブロックされている場合には、許可リストに追加する必要があります。

他のノートブックへのリンク

マークダウンセルで相対パスを用いることで別のノートブックやフォルダにリンクすることができます。$で始まりUnixファイルシステムと同じパターンで相対パスをアンカータグのhref属性に指定します。

Markdown
%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>

Databricks 無料トライアル

Databricks 無料トライアル

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1