Databricksノートブックとは何か？

先日こちらのスライドを翻訳しました。

<script defer class="speakerdeck-embed" data-id="467a9692c6484e3aa6731627670254ad" data-ratio="1.7761332099907492" src="//speakerdeck.com/assets/embed.js"></script>

私は日常的にDatabricksノートブックを使っていますが、考えてみれば使い続けて約4年が経過しています。ですので、改めてここで振り返ってみたいと思います。

# ノートブックとは？

こちらの記事を読むことをお勧めします。

https://qiita.com/hinastory/items/e179361ae806e8776c70

- ノートブックは1つ以上の**セル**から構成されます。
- **セル**にPythonなどのコードを記述します。実行結果はセルの下に表示されます。
- コード以外に**メモ**をノートブックに含めることができる。メモは[Markdown形式](https://un4navi.com/prologue/20079/)で記述します。
- コードは順不同で実行でき、何度も実行することもできます。これによって、開発時のデバッグが簡単になります。ただし、変数や関数を宣言している前のセルの実行を忘れないようにしてください。

# Databricksノートブックとは？

上述のノートブックのDatabricksバージョンです。Databricksにはいろいろなインタフェースがありますが、Databricksノートブックが主要なインタフェースとなります。正面玄関です。

![Screenshot 2025-02-05 at 9.51.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8f0b409d-260f-5c5e-0376-4ff3ae48da1f.png)

## Jupyter Notebookとの違いは？

ノートブックの先駆けは[Juypter Notebook](https://www.databricks.com/jp/glossary/jupyter-notebook)ですが、いろいろな側面で拡張がなされています。[こちら](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d#jupyter-notebook%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84)に違いをまとめていますが、1年以上前のものなので改めて列挙します。

|  | Jupyter Notebook | Databricksノートブック |
|:--|:--|:--|
| 計算リソース  | Juypter Notebookが稼働しているラップトップ、サーバーのリソースに制限を受けます。多くの場合、pandasの利用が前提となるのでメモリーの制約を受けます。  |  クラウドプロバイダー(AWS/Azure/GCP)が提供するリソースを理論上無制限に活用できます。pandasに加えて[Spark](https://www.databricks.com/jp/spark/about)も活用できるので、並列処理による恩恵を享受することができます。 |
| コラボレーション  | ラップトップで動作しているJupyter Notebookでの他のユーザーとのコラボレーションは限定的であり、[JupyterHub](https://jupyter.org/hub)を用いたとしてもその機能は限定的です。  | 複数ユーザーによるコラボレーションを前提としており、ノートブックやデータに対するアクセス制御やノートブックの同時参照、同時編集をサポートしています。最近になって[コメントの通知](https://docs.databricks.com/ja/notebooks/notebooks-collaborate.html#code-comments)もサポートされました。  |
|AIアシスタント|[Jupyter AI](https://jupyter-ai.readthedocs.io/en/latest/index.html)が提供されているが個別セットアップが必要です。|[Databricksアシスタント](https://docs.databricks.com/ja/notebooks/databricks-assistant-faq.html)がビルトイン。コードのオートコンプリートや自動修正などもサポートしています。|
|可視化|matplotlibやseabornによるライブラリを用いて可視化のロジックを記述する必要があります。|ライブラリによる可視化に加え、[ノーコードでのビジュアライゼーション](https://docs.databricks.com/ja/visualizations/index.html)がビルトインされています。|
|バージョン管理|バージョン管理システムと連携する必要があります。|[ビルトインのバージョン管理機能](https://docs.databricks.com/ja/notebooks/notebook-version-history.html)に加え、[Gitとの連携](https://docs.databricks.com/ja/repos/index.html)も可能です。|
|マルチ言語対応|カーネルレベルで他言語に対応する必要があります。|同一ノートブック内でPython、SQL、R、Scalaを使用できます。|
| ガバナンス  | ラップトップで動作しているJupyter Notebookでは、個人のデータサイエンティストによる管理しか行えず、企業全体でのデータやコード、機械学習モデルの管理を統一することができません。  | [MLOps](https://www.databricks.com/jp/glossary/mlops)を前提としており、データ、コード、機械学習モデルは全て[Unity Catalog](https://www.databricks.com/jp/product/unity-catalog)によって管理されます。  |
|本格運用(Production)|ラップトップ上で実験的にPythonを実行するには適してますが、本格運用するためにジョブを組むには別のシステムが必要となります。|Databricksには[ワークフロー](https://www.databricks.com/jp/product/workflows)の機能が搭載されているので、実験・テストを経たロジックを簡単に本格運用に移行することができます。また、[さまざまなAPI](https://docs.databricks.com/ja/workflows/jobs/jobs-2.0-api.html)を公開しているので、他のシステムとの連携も容易です。|

# Databricksノートブックのウォークスルー

上述の違いにフォーカスしながら、Databricksノートブックの基本的な使い方をウォークスルーします。

ウォークスルーするノートブックはこちらです。

https://github.com/taka-yayoi/what_is_databricks_notebook

## Databricksノートブックのインタフェース

[新規にノートブックを作成](https://learn.microsoft.com/ja-jp/azure/databricks/notebooks/notebooks-manage#create-a-notebook)すると以下のような画面が表示されます。最初に慣れ親しんだほうが良い機能を太字で示しています。

![Screenshot 2025-02-05 at 12.38.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/208e2a31-d674-f498-54e8-0fe461af1269.png)

- **ノートブック名**: クリックで変更できます。
- **デフォルト言語**: ノートブックのデフォルト言語を選択します。Python、SQL、R、Scalaから選択できます。
- **コンピュートセレクター**: ノートブックのコード実行に必要な計算資源を選択します。
- **アシスタント**: Databricksアシスタントを呼び出します。
- **設定**: ノートブックを含むDatabricksの様々な設定を行います。
- **セル**: ノートブックを構成するコードやマークダウンを記述するための箱です。
- **セルの実行**: 選択しているセル、あるいは前後のセルを実行します。
- **セルの言語**: ノートブックのデフォルト言語と異なる言語をセル単位で指定できます。後ほど詳細を説明します。
- **セルの削除**: セルを削除します。設定によっては確認ダイアログを非表示することもできます。
- **セルの追加**: 既存のセルの上下に新たなセルを追加します。このボタンはセルの境界にカーソルを移動すると表示されます。

## クラスターへのアタッチ

画面の右上にあるコンピュートセレクターを使用して、このノートブックをクラスターにアタッチ(接続)します。

![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/attach_compute.png)

:::note info
**注意**
クラスターのデプロイには数分かかる場合があります。リソースがデプロイされると、クラスター名の右側に緑色の丸が表示されます。クラスターの左側に灰色の円が表示されている場合は、<a href="https://learn.microsoft.com/ja-jp/azure/databricks/compute/clusters-manage" target="_blank">クラスターを起動する</a>手順に従う必要があります。
:::


## ノートブックの基本

ノートブックは、コードをセルごとに実行することができます。ノートブック内で複数の言語を混在させることができます。ユーザーはプロット、画像、マークダウンテキストを追加してコードを補強することができます。

このコースを通じて、ノートブックは学習ツールとして設計されています。ノートブックは、Databricksで本番コードとして簡単にデプロイできるだけでなく、データ探索、レポート作成、ダッシュボード作成のための強力なツールセットを提供します。

### セルの実行

以下のいずれかのオプションを使用して、下のセルを実行します:
* **CTRL+ENTER** または **CTRL+RETURN**
* **SHIFT+ENTER** または **SHIFT+RETURN** でセルを実行し、次のセルに移動
* **▶︎**ボタン、**セルを実行**、**上記をすべて実行**、**以下をすべて実行** を使用<br/>![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/run_cell.png)

```py
print("私はPythonを実行しています！")
```
![Screenshot 2025-02-05 at 13.58.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fbd254c8-893d-c394-8c53-b5c912e0c2c5.png)

:::note info
**注意**
セルごとのコード実行は、セルが複数回または順不同で実行される可能性があることを意味します。明示的に指示されない限り、このコースのノートブックは上から下へ1つずつ実行することを前提としています。エラーが発生した場合は、トラブルシューティングを試みる前に、エラーが意図した学習のタイミングでなかったかどうかを確認するために、セルの前後のテキストを必ず読んでください。ほとんどのエラーは、**ノートブックの以前のセルを実行し忘れた**ことであり、ノートブック全体を最初から再実行することで解決できます。
:::

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

- 上のセルはPythonコマンドを実行します。なぜなら、現在のノートブックの**デフォルト言語**が`Python`に設定されているからです。
- DatabricksノートブックはPython、SQL、Scala、Rをサポートしています。ノートブックを作成する際に**デフォルト言語**を選択できますが、これはいつでも変更可能です。
- **デフォルト言語**はページ上部のノートブックタイトルの右側に表示されます。このコース全体で、SQLとPythonのノートブックを併用します。
![default_language_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e1dcbc4b-2ddb-f6b4-b9f3-413c906848d4.png)

このノートブックのデフォルト言語をSQLに変更します。

手順:
* 画面上部のノートブックタイトルの横にある**Python**をクリックします
* ドロップダウンリストから**SQL**を選択します
* 確認メッセージが表示されるので**確認**をクリックします
![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/default_language_2.png)


:::note info
**注意**
デフォルト言語の変更後、このセルの上のセルには<strong><code>&#37;python</code></strong>と表示されるはずです。これについては後ほど説明します。
:::

### SQLセルの作成と実行

手順:
1. このセルをハイライトし、キーボードの **B** ボタンを押して下に新しいセルを作成します
1. 以下のコードを下のセルにコピーして、セルを実行します

    ```sql
    %sql
    SELECT "私はSQLを実行しています！"
    ```

![Screenshot 2025-02-05 at 14.05.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6a491434-9084-3f71-422b-19c29c528b21.png)


:::note info
**注意**
セルの追加、移動、削除には、GUIオプションやキーボードショートカットを含むさまざまな方法があります。詳細については、<a href="https://learn.microsoft.com/ja-jp/azure/databricks/notebooks/notebooks-code" target="_blank">ドキュメント</a>を参照してください。
:::

## マジックコマンド
- **マジックコマンド**はDatabricksノートブックに特有のものです
- これらは、同様のノートブック製品に見られるマジックコマンドと非常に似ています
- これらは、ノートブックの言語に関係なく同じ結果を提供する組み込みコマンドです
- セルの先頭に単一のパーセント（`%`）記号があると、マジックコマンドであることがわかります
  - セルごとに1つのマジックコマンドしか使用できません
  - マジックコマンドは**セルの最初**に配置する必要があります

### 言語マジックコマンド

言語マジックコマンドを使用すると、ノートブックのデフォルト以外の言語でコードを実行できます。このコースでは、次の言語マジックを使用します:
* <strong><code>&#37;python</code></strong>
* <strong><code>&#37;sql</code></strong>

これ以外の言語マジックコマンドについては[こちら](https://learn.microsoft.com/ja-jp/azure/databricks/notebooks/notebooks-code#language-magic)をご覧ください。

ノートブックで設定されているデフォルト言語のマジックコマンドを追加する必要はありません。

上でノートブックのデフォルト言語をPythonからSQLに変更したとき、既存のPythonセルには<strong><code>&#37;python</code></strong>マジックコマンドが追加されました。

:::note info
**注意**
ノートブックのデフォルト言語を頻繁に変更するのではなく、主に使用する言語をデフォルトとして使用し、他の言語でコードを実行する必要がある場合にのみ言語マジックコマンドを使用するべきです。
:::

![Screenshot 2025-02-05 at 14.07.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8e5290f9-556d-cd6b-0749-c67cfa43ea1a.png)

### マークダウン

マジックコマンド **%md** を使用すると、セル内でマークダウンをレンダリングできます:

```md
* このセルをダブルクリックして編集を開始します
* 編集を終了するには **`Esc`** を押します

# タイトル1
## タイトル2
### タイトル3

これは緊急放送システムのテストです。これはテストに過ぎません。

これは**太字**の単語を含むテキストです。

これは*斜体*の単語を含むテキストです。

これは順序付きリストです
1. 一度
1. 二度
1. 三度

これは順序なしリストです
* りんご
* 桃
* バナナ

リンク/埋め込みHTML: <a href="https://en.wikipedia.org/wiki/Markdown" target="_blank">Markdown - Wikipedia</a>

画像:
![Spark Engines](https://files.training.databricks.com/images/Apache-Spark-Logo_TM_200px.png)

そしてもちろん、テーブル:

| 名前   | 値   |
|--------|------|
| Yi     | 1    |
| Ali    | 2    |
| Selina | 3    |
```

以下のようにレンダリングされます。

![Screenshot 2025-02-05 at 14.08.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d3d58356-dcdd-ad42-4cfc-54b52f14fd9f.png)

:::note info
**注意**
画像を埋め込みたい場合、マークダウンセルに直接画像をドラッグ&ドロップすることで埋め込むこともできます。詳細は[こちら](https://docs.databricks.com/ja/notebooks/notebook-media.html#drag-and-drop-images)をご覧ください。
:::


## display()

セルからSQLクエリを実行すると、結果は常にレンダリングされた表形式で表示されます。

Pythonセルから表形式のデータが返された場合、同じタイプのプレビューを得るために [**`display`**](https://learn.microsoft.com/ja-jp/azure/databricks/visualizations/) を呼び出すことができます。

ここでは、Unity Catalogで管理されるテーブルから読み込んだデータを **`display`** でラップします。

```py
%python
df = spark.table("samples.nyctaxi.trips")
display(df)
```
![Screenshot 2025-02-05 at 14.09.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e59358fc-7658-4e1b-3f0a-3e13bc048b98.png)

**`display()`** コマンドには以下の機能と制限があります:
* 結果のプレビューは10,000レコードに制限
* 結果データをCSVとしてダウンロードするボタンを提供
* 結果データをビルトイン機能で可視化

### データの可視化

上で表示したデータを可視化してみます。

手順:
- 上のデータの**テーブル**の右にある **+ > 可視化** をクリックします。
![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/visualize_1.png)
- 以下のようにグラフの設定を行い保存します。
![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/visualize_2.png)

このように、ノーコードでデータを可視化することができます。

![Screenshot 2025-02-05 at 14.11.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/dd58f27d-f1a7-dc68-c84c-dfb64c60f6d9.png)

## アシスタントの活用

Databricksのプラットフォームに組み込まれているDatabricksアシスタントは、様々なシーンであなたを支援します。困った時には、色々な場所にある![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/assistant_1.png)アイコンをクリックしてアシスタントを呼び出しましょう。

### コードを書いてもらう

手順:
1. 下にコードブロックを追加します。
1. セルの言語が**SQL**になっているので、**Python**に変更します。
![SQL_to_Python.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/bc81d376-5601-4f88-ab64-1e6bce96bab8.png)

1. 追加したセル右上の![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/assistant_1.png)アイコンをクリックしてアシスタントを開きます。
1. 表示されるプロンプトボックスに`helloを表示`と入力し、**Generate**をクリックします。
![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/assistant_2.png)
1. 指示に従ったPythonコードが表示されるはずです。**Accept**で確定します。

![Screenshot 2025-02-05 at 14.12.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/253b12da-6d2b-136c-8211-8b49704a8c7e.png)

### マークダウンを書いてもらう

手順:
- 下のマークダウンセルでアシスタントを開きます。
- プロンプトボックスに`翻訳`と入力して、**Generate**をクリックします。

![Screenshot 2025-02-05 at 14.12.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/58301c1d-5474-dff1-4497-fa4c7c9b8ec2.png)

## ノートブックでのコラボレーション

Databricksで取り扱う資産(ノートブック、テーブル、ファイルなど)はすべて**アクセスコントロール**がされています。適切なアクセス権を設定することで、チーム間で資産を安全に共有することができます。

ノートブックのデフォルトのアクセス権は以下のようになっています:

- ノートブックの作成者と管理者はノートブックに対するフルアクセスを持ちます。
- それ以外のアクセス権は明示的に許可する必要があります。

アクセス権を設定するにはノートブック右上の**共有**ボタンを押します。**誰**に**どのような権限**を与えるかを設定してアクセス権を設定します。

![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/configure_acl_1.png)
![](https://sajpstorage.blob.core.windows.net/yayoi/20250205_notebook_tutorial/configure_acl_2.png)

アクセスが許可されたノートブックでは、[同時参照や同時編集、コメントを介したやり取り](https://learn.microsoft.com/ja-jp/azure/databricks/notebooks/notebooks-collaborate)を行うことができます。

## ノートブックのダウンロード

個々のノートブックやノートブックのコレクションをダウンロードするためのオプションがいくつかあります。ここでは、このノートブックをダウンロードする手順を説明します。

手順:
- ノートブックの上部にあるノートブックメニューにある **ファイル** オプションをクリックします。
- 表示されるメニューから **エクスポート** にカーソルを合わせ、**ソースファイル** を選択します。

ノートブックは個人のラップトップにダウンロードされます。現在のノートブック名で名前が付けられ、デフォルト言語のファイル拡張子が付きます。このノートブックは任意のファイルエディタで開いてDatabricksノートブックの生の内容を見ることができます。

これらのソースファイルは任意のDatabricksワークスペースにアップロードできます。

# まとめ

このように、Databricksノートブックはノーコードでの可視化やAIアシスタントなど、開発や分析の生産性を高める様々な機能を提供しています。基本的な機能に慣れ親しんだら、以下のドキュメントを参考に実践を通じてDatabricksノートブックを最大限に活用できるようになることをお勧めします。

# その他のリソース

Databricksのプラットフォームとノートブックの様々な機能をさらに学ぶには、ドキュメントを探索することをお勧めします。

**Azure**
- [Azure Databricks とは](https://learn.microsoft.com/ja-jp/azure/databricks/introduction/)
- [Azure Databricks を始める](https://learn.microsoft.com/ja-jp/azure/databricks/getting-started/)
- [ワークスペースを移動する](https://learn.microsoft.com/ja-jp/azure/databricks/workspace/)
- [Databricks ノートブックの概要](https://learn.microsoft.com/ja-jp/azure/databricks/notebooks/)
- [コンピューティング](https://learn.microsoft.com/ja-jp/azure/databricks/compute/)
- [データを検出する](https://learn.microsoft.com/ja-jp/azure/databricks/discover/)
- [データに対するクエリの実行](https://learn.microsoft.com/ja-jp/azure/databricks/query/)
- [Databricks ノートブックでの視覚化](https://learn.microsoft.com/ja-jp/azure/databricks/visualizations/)
- [Python 開発者向けの Azure Databricks](https://learn.microsoft.com/ja-jp/azure/databricks/languages/python)
- [Databricks アシスタントを使用する](https://learn.microsoft.com/ja-jp/azure/databricks/notebooks/use-databricks-assistant)
- [Databricks ノートブックのエクスポートとインポート](https://learn.microsoft.com/ja-jp/azure/databricks/notebooks/notebook-export-import)
- [Databricks レイクハウスにデータを取り込む](https://learn.microsoft.com/ja-jp/azure/databricks/ingestion/)
- [Databricks ノートブックを使用して共同作業する](https://learn.microsoft.com/ja-jp/azure/databricks/notebooks/notebooks-collaborate)

**AWS**
- [Databricks の使用を開始する](https://docs.databricks.com/ja/getting-started/index.html)
- [ワークスペース内を移動する](https://docs.databricks.com/ja/workspace/index.html)
- [Databricksノートブック入門](https://docs.databricks.com/ja/notebooks/index.html)
- [コンピュート](https://docs.databricks.com/ja/compute/index.html)
- [データの検出](https://docs.databricks.com/ja/discover/index.html)
- [データのクエリー](https://docs.databricks.com/ja/query/index.html)
- [Databricks ノートブックにおけるビジュアライゼーション](https://docs.databricks.com/ja/visualizations/index.html)
- [Python開発者のためのDatabricks](https://docs.databricks.com/ja/languages/python.html)
- [Databricks Assistant からコーディングのヘルプを受ける](https://docs.databricks.com/ja/notebooks/code-assistant.html)
- [ノートブック Databricks エクスポートとインポート](https://docs.databricks.com/ja/notebooks/notebook-export-import.html)
- [Databricks レイクハウスにデータを取り込む](https://docs.databricks.com/ja/ingestion/index.html)
- [Databricks ノートブックを使用した共同作業 \| Databricks on AWS](https://docs.databricks.com/ja/notebooks/notebooks-collaborate.html)

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

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