はじめてDatabricksをさわってみて

こんにちは。

オンプレ業務SEからデータエンジニアへのキャリアチェンジを果たし、半年が経過したアラフォーです。当初クラウド知識ゼロだった私が、Snowflakeとdbtの業務経験を積み、今度はdatabricksにチャレンジすることになりました。取り組んでみた教材と取り組む中でつまづいた点等について紹介したいと思います。これからdatabricksを始めてみたいという方の参考になれば幸いです。

# 私自身のスペック
* AWS：S3くらいしか触ったことはないが、初心者セミナー等に参加したことはあるレベル
* dbt：dbt Coreの開発経験あり（半年間）
* Snowflake：dbtとコラボで開発経験あり（半年間）
* Python、機械学習：5年前に初心者向け書籍を購入し独学で少し勉強した経験あり
* Spark：知識ゼロ
* SQL：それなりに使えるようになった気がする
* Java：新卒入社当時（15年以上前）開発経験あり（5年間）、社内の新人教育講師などもかじってました

# 前提条件
* 社内でDatabricks環境の用意がすでにあり
※したがって、今回管理者が行う作業は実施していません。

# 取り組んだ教材・参考にしたblog
* Databricks社)弥生様のQiita記事「[2023年12月版] Databricksとは何か？」

https://qiita.com/taka_yayoi/items/91dde16b275c279ad2a2

* Delta Lake とは何か

https://ktksq.hatenablog.com/entry/deltalake

* [Databricks社)弥生様のQiitaチュートリアル](https://qiita.com/taka_yayoi/items/4603091dd325c77d577f)
   * ワークスペースの画面に慣れる
   * ノートブックの操作に慣れる
   * ライブラリをインストールする
   * データにアクセスする
   * ローカルからアップロードしたデータにアクセスする
   * サンプルデータにアクセスする
   * PySparkの操作に慣れる
   * 機械学習モデルをトレーニングする
   * ダッシュボードを作成する
   * 画像を取り扱う
* [Databricsドキュメント内の以下チュートリアル](https://docs.databricks.com/ja/index.html)
   * [ノートブックからデータを照会する](https://docs.databricks.com/ja/getting-started/quick-start.html)
   * [基本的なETLパイプラインを構築する](https://docs.databricks.com/ja/getting-started/etl-quick-start.html)
   * [Lakeviewクイックスタート](https://docs.databricks.com/ja/dashboards/lakeview-quickstart.html)

※総学習時間：25時間程度

# 全体的な感想
まず、ノートブックにはじまり、Lakeviewダッシュボードに至るまで、ハイクォリティな機能の数々を体感することができ、大変面白かったです。ただ、初心者には少しとっかかりにくいかもしれない(?)と思いました。

特に、データエンジニアリングって何？という段階の初心者の方々には、活用イメージが少し湧きにくいかもしれません。SQLすら初めてだとなおさら難しいと思います。その点ではSnowflakeの方が教育が体系化されており、上記のような方々を対象としたハンズオンが用意されております。

また、チュートリアル全体として、PySparkのコードがたくさん登場します。PySparkそのものを知らなかった私は、ノートブックに言語＝"Python" を指定し、`df`という変数が登場した場面では、てっきりPandasだと勘違いし、Pandasで一生懸命調べてコードを理解しようとしてしまいましたが、それはPySparkのデータフレームだったのでした。PySparkについては弥生様チュートリアルの「[PySparkの操作に慣れる](https://qiita.com/taka_yayoi/items/a7ee6287031374efa88a)」の章で分かりやすいご説明があります。それまでは、コーディング内容についてはあまり気にせず進めるか、先に「[PySparkの操作に慣れる](https://qiita.com/taka_yayoi/items/a7ee6287031374efa88a)」に取り組んでいただいた方がよいと思います。

# 教材別の特徴・感想
* Databricks社)弥生様のQiita記事「[2023年12月版] Databricksとは何か？」
  チュートリアルに取り組む前に、一読しておくことをお勧めします。まずは俯瞰して概要を確認しましょう。

   <p><p />

* Delta Lake とは何か
  Databricksでは、Delta形式でデータをテーブルに保存するが、そもそもDelta形式って何なの？という疑問がわいてたどり着いたページです。知らない人は一読しておくことをお勧めします。

   <p><p />

* Databricks社)弥生様のQiitaチュートリアル

   * ワークスペースの画面に慣れる
     GUIがアップデートされており、実際の画面とチュートリアルの画面イメージは異なりましたが、特に悩むことはなかったです。一応、気になったところは少し紹介しておきます↓
     
![スクリーンショット 2024-04-08 114059.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553040/3fa6e649-59ae-ce48-c1c6-b79a1b90b2de.png)

![スクリーンショット 2024-04-08 114312.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553040/e2e81088-e15f-2bdc-0335-aa7295c255bd.png)

![スクリーンショット 2024-04-08 114818.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3553040/6c67fbe4-685f-228d-39a4-1fa23383ac76.png)
 
　<p><p />

* Databricks社)弥生様のQiitaチュートリアル

  * ノートブックの操作に慣れる
早くコードを動かしてみたかったのでざっと閲覧。それでもちゃんと使える分かりやすいGUIです。でも熟読すれば便利な機能を知ることができそう。  

    <p><p />

  * ライブラリをインストールする
XlsxWriterをインストールしてExcelを出力させる内容なのですが、FutureWarningが出てしまい、Excelが出力されず断念。。。インストールするという課題はクリアできたのでよしとしました。pythonライブラリも日々進化しているので、この後も似たような事象は度々発生しました。
    <p><p />

  * データにアクセスする
早くこの章に取り組みたい気持ちは分かりますが、「PySparkの操作に慣れる」を先に取り組むのがオススメです。なお、PySparkはすでに知ってるという方はどうぞ進めてください。
    <p><p />

  * ローカルからアップロードしたデータにアクセスする
特に迷うことなく実施できました。DBFSを直に扱える重要な単元ですね。
    <p><p />

  * PySparkの操作に慣れる
とても分かりやすかったです。今までの悶々とした悩みがすべて解決されました！
    <p><p />

  * 機械学習モデルをトレーニングする
めちゃくちゃ難しかったですが、直近のミッションに関わるのでがんばって理解に努めました。教材の超おおまかな流れは以下のとおりです。
①サンプルデータを取り込む
②特徴量（答えの決め手となる要素）を調べる
③割とシンプルなアルゴリズム（ランダムフォレスト）で機械学習モデルを作成する
④③で作成したモデルをdatabricksのモデルレジストリに登録する
⑤別の複雑なアルゴリズム（勾配ブースティング回帰木）で、より質の良い機械学習モデルを作成する。
⑥④で登録したモデルを⑤で更新する。
⑦モデルをデプロイして、外部からアクセス可能にする。(CLIが必要だったため未実施)

  ちなみに、⑤は結構重たい処理です。スペック「11.3 LTS ML (includes Apache Spark 3.3.0, Scala 2.12)」のクラスターで実行すると、40分近くかかりました。また、`np.random.RandomState`ではエラーが発生し、`np.random.default_rng`にコード修正しています。
    <p><p />

  * ダッシュボードを作成する
SQLダッシュボードの説明ですが、databricksとしては将来的にLakeviewダッシュボードに置き換えたいと考えているようなので、公式の「Lakeviewクイックスタート」を取り組んだ方がよさそうです。
    <p><p />

  * 画像を取り扱う
画像をDBFSにアップロードして、ノートブックに表示させるという楽しい体験ができます。さまざまな制限を回避するためにはバイナリデータとして扱った方がよいそうですが、そこまでは実施しませんでした。
    <p><p />

* Databricsドキュメント内の以下チュートリアル

  * ノートブックからデータを照会する
弥生様のチュートリアルでデータにアクセスするところまで実施したら、復習がてらに実施するとよいです。シンプルで分かりやすい内容です。
    <p><p />

  * 基本的なETLパイプラインを構築する
急にハードルがあがります。パイプラインが何か分からない場合はイメージできないかもしれません。パイプラインのことから学びたい場合は [Snowflake University: 「Hands On シリーズ (Badge 5: Data Engineering Workshop )」](https://learn.snowflake.com/en/courses/uni-ess-dngw/)がおすすめです。
    <p><p />

  * Lakeviewクイックスタート
とても面白かったです。いろいろと使えそうな素晴らしい機能だと思います。

# 最後に
databricksを始めて、まだ数日しか経っていませんので、まだまだ分からないことだらけの状態で記事を書いています。ですので、教育について等、Snowflakeの方が初心者向けなどと書いていますが、もっと探せば存在するのかもしれません。恐れ入りますが、もし訂正すべき内容等ございましたらご連絡いただけると幸いです。私自身も学習を続ける中で間違いに気づいたら訂正していきます。