Databricks経由Machine Learningの旅  第一話 -kaggleのデータをTROCCO®で準備する- 

# はじめに
[ETLツールであるTROCCO®の転送先として、Databricks](https://x.com/trocco_jp/status/1802993566765248577)が2024年6月に追加されました。

![スクリーンショット 2024-08-11 17.17.26（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/77066b07-6dce-d2c2-f0f2-a4513b0cbd32.png)

自社製品がDatabricksに対応したと聞き、近いうちに触りたいと思ってました。
元々の興味・関心がデータサイエンスや機械学習にあったため、存在自体は以前から認知していました。
加えて、現職で日々扱っているデータエンジニア面の機能も整備されており、今後積極的に使っていきたいプラットフォームの１つでもありました。

自分の勉強もかねて、これから何回かにわたり、機械学習と絡めてDatabricksの機能を記事にしていきたいと思います。
記念すべき第1回は、㊗️転送先Databricksとして「TROCCO®を活用してkaggleのデータを準備する手順」について紹介していきます。

# 対象の読者
- 機械学習やデータサイエンスにDatabricksを通じて触れたい方
- Databricksのデータ準備でTROCCO®の活用を考えている方

# Databricksて何？
開発に入る前に、簡単なDatabricksの説明をします。

Databricksは、Apache Sparkの生みの親が開発したデータ分析基盤のプラットフォームです。

最大の特徴は「レイクハウス・プラットフォーム」を提供していることです。
レイクハウスとは、データの収集・蓄積から分析・機械学習モデル開発並びに運用を一気通貫・効率的かつ安価に行うことができる統合プラットフォームであり、データレイクとデータウェアハウスの２つの機能を持っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/14516093-8d17-982b-340f-33a0401937ea.png)

長所は、データの在処が比較的わかりやすい構造になってることから、データのサイロ化を防いでくれる点にあります。

また、Databricks内ではNotebook環境があり、画像データのような非構造化データも扱うことができるため、データサイエンティストやMLエンジニアにとって非常に馴染みやすい構造になってます。

これらの点を踏まえ、Databricksは機械学習やデータサイエンスに取り組む上で非常に有用なプラットフォームの１つだと言えます。

# 転送するデータの紹介
機械学習の題材として、kaggle APIからデータを取得します。

kaggleやったことある人なら知っているであろう、[Titanicデータ](https://www.kaggle.com/c/titanic/data)を今回は使います。

![スクリーンショット 2024-08-12 0.13.37（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/a3004683-d003-2bc9-dfc4-f334b65a6979.png)

# 転送前の事前準備
転送を実装する前に、Databricks,TROCCO®,Kaggle APIそれぞれで事前の設定が必要になります。

### 転送用Databricksのウェアハウス・スキーマの準備

:::note warn
[Databricksのアカウント](https://www.databricks.com/jp)があることを前提とします。無料でも始められます。
:::

まず、Databricks内にSQLウェアハウスを作成してください。

![スクリーンショット 2024-08-11 21.54.09 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/cb4dc9f3-fb19-ea67-ed29-aa33f7ae58ba.png)

次に、データ転送にあたり、Databricks上でスキーマを作成する必要があります。
「SQLエディタ」から下記SQLを叩くなどして、転送用のスキーマを作ります。

```
CREATE SCHEMA IF NOT EXISTS {カタログ}.{スキーマ};
```

![スクリーンショット 2024-08-11 20.40.25 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/e2e8ffe8-934e-cff0-be41-b39b35f8a03a.png)

作成されたかどうかはカタログから参照できます。

![スクリーンショット 2024-08-11 20.49.10 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/f08ee786-80e2-12d6-88b7-223060bb8586.png)

### TROCCO®でのDatabricksの認証設定
Databricksと接続するにあたり、TROCCO®で認証設定が必要になります。

TROCCO®の画面から、接続情報の新規作成を選び、Databricksを選択します。

![スクリーンショット 2024-08-12 14.24.16 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/1f2f8e20-8361-98cd-bb8b-5cb1b96ebe98.png)

TROCCO®との接続は、DatabricksのSQLウェアハウス単位で行います。
SQLウェアハウスの「サーバーのホスト名」「HTTPパス」を、TROCCO®の「Server Hostname」「HTTP Path」に設定します。
またTROCCO®のPersional Access Tokenについては、SQLウェアハウスの「パーソナルアクセストークンを作成する」を押して、アクセストークンを発行してください。
（バツ閉じするとアクセストークンが再表示できないので、メモの準備をお願いします）

![スクリーンショット 2024-08-12 15.25.46 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/c23f86be-552f-9e57-8886-57a4c43e50ed.png)

![スクリーンショット 2024-08-12 15.21.54 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/c7a7d1f7-52f0-7cac-fb26-a8c54b4c3d89.png)

### kaggle APIのトークン取得

最後にkaggle APIを使うための、トークン発行を行います。
Settingの画面から、APIのCreate New Tokenを押して、発行します。

![スクリーンショット 2024-08-12 0.35.39 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/38bca5b9-2677-76c7-5a8f-f5eaf7c514bf.png)

発行後、jsonファイルとしてローカルにダウンロードされます。
後の章で使う`username`と`key`が取得できます。

![スクリーンショット 2024-08-12 0.44.25 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/ecc11644-73f2-a26d-dfbf-306ea9312065.png)


# 転送の実装
TROCCO®にログインし、転送設定の新規作成に進み、以下を選択します。
- 転送元 HTTP・HTTPS
- 転送先 Databricks

![スクリーンショット 2024-08-11 23.38.21 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/943c84d9-2211-d0b3-2182-3cd1ac487460.png)


### 転送元の設定
今回はTitanicデータの中で、train.csv(訓練データ)を転送します。
kaggel APIの設定は以下表のように実行してください。
表にない項目はデフォルト値や空欄で問題ありませんでした。

|設定項目名|設定内容|
|:-|:-|
|URL |`https://www.kaggle.com/api/v1/competitions/data/download/titanic/train.csv`|  
|HTTPメソッド |GET|
|文字エンコーディング |utf8|
|ファイル入力形式|CSV/TSV|
|HTTPヘッダ`Authorization`|Basic `username`:`key`|

※ HTTPヘッダの`username`:`key`は[BASE64](https://ja.wikipedia.org/wiki/Base64)に変換する必要がありました...汗
今回[こちらのサイト](https://mixedanalytics.com/tools/basic-authentication-generator/)を活用して認証がうまくいきました。

![スクリーンショット 2024-08-12 13.22.06 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/f6e4fad2-eb99-2896-0340-fd0bf3c8e285.png)

### 転送先の設定
転送先の設定として、Databricksのカタログ、スキーマ、テーブルを設定してきます。
転送モードは今回全件洗い替え(REPLACE)を採用、詳細設定はご自身の環境に合わせて設定してください。

![スクリーンショット 2024-08-11 23.25.46 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/a3cfe10b-7f41-ea10-8403-a740e506069f.png)

STEP2に進み、転送前のデータの中身を確認します。
データ型等はデフォルトの値で転送上問題ありませんでした。

![スクリーンショット 2024-08-12 13.50.15 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/d68e2378-1c71-9b4e-c664-7a035e8cc1bc.png)

# 実行結果の確認
Databricks内のSQLエディタを開き、下記SQLを叩いて、データが正しく表示されれば転送成功です！お疲れ様でした！

```
SELECT * 
FROM
{カタログ}.{スキーマ}.{テーブル};
```

![スクリーンショット 2024-08-12 13.51.27 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/b496262e-6018-44a4-0fec-97bf7a9214d0.png)

# まとめと今後の予定
今回はDatabricksの転送先が開発されたことを記念して、試しにkaggleのデータを転送してみました。
本業で取り組んでいる[「転送元HTTPの記事発信」](https://qiita.com/wakama1994/items/57f4dcf9b1cba17b51a7)と同じ感覚で設定できたので、楽に進めることができました！
初手でDatabricksを扱うのは、これくらいから始めるのが良さげですね。

また、kaggle APIを紹介したブログや記事ではCLIを使ってる場合が多いですが、TROCCO®だと設定項目も少なくGUIで完結するため、スムーズにデータ転送ができます。
転送元HTTP・HTTPS、本当に使い勝手良いですね。

次回は、Databricks内のNotebookをいじっていきたいと思っています。
何回連載するかは未定ですが、最終的には、社内に蓄積されたデータを使って、予測モデルを構築し、予実の乖離を見て遊びたいと思います。

続編を楽しみにしていてください！

# 参考文献
TROCCO®,kaggle,Databricksの公式ドキュメント以外にも以下の記事を参考にしました。
- [「Databricks とは？何ができるか」新入社員が感じたイケてる機能１０選](https://qiita.com/kohei-arai/items/83a8a54880defbf35fa0#databricks%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B)
- [TROCCO が Databricks への書き込みをサポートしたので Salesforce のデータを転送してみた](https://qiita.com/manabian/items/a4688641c56891279b04)
- [troccoで簡易MLOpsをまわしてみる](https://camo.qiitausercontent.com/b8f5f40ae0f159273fa79b71d1abed9bb89895b4/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3234393335382f32346333353838372d663562302d396563622d313761632d3862306436666137633962392e706e67)