Azure DatabricksでPythonとMeCabを使う

# 本記事の目的
Azure Data Factoryの前処理で、MeCabを利用した簡単な自然言語処理（形態素解析＋α程度）をしたい。
関数として実装して、後々LogicAppsとか色々なサービスから呼び出せれば便利そう。ということで2つの実装方法を検討した。

1. Azure Functions ([Azure FunctionsでPythonとMeCabを使う](https://qiita.com/ryokita/items/eb9b6577b67daa49a23f))
2. Azure Databricks (本記事)

当面はAzure Functionsで十分そうだが、将来的に機械学習のように重たい処理を行う場面を想定すると、Databricksのサービスも把握しておきたい、ということでDatabricksも試してみた。

先に結論を書くと、
**・Azure Databricks初心者は以下のMicrosoft Learn（無償）が分かりやすい**
>Azure Databricks を使用して Data Engineering を実行する
https://docs.microsoft.com/ja-jp/learn/paths/data-engineering-with-databricks/

**・MeCabはクラスターに対して「mecab-python3」をPyPIでインストールすれば使える**
**・ブラウザでAzure PortalとDatabricksにアクセスすれば完結、ローカルの環境設定は不要**

理解不足の点も多々あるので、間違いなどあればご指摘下さい。
適宜、修正・追記します。

# Databricks概要
Apache Spark ベースの分析プラットフォーム。コンピューティングリソースを必要に応じてスケールアウトして分散処理することができる。
### 課金体系
やや分かりづらい部分もあるが、大まかに以下の2つに対する課金となる。

・クラスターにプロビジョニングされた仮想マシン (VM) 
・選択した VM インスタンスに基づく Databricks の単位 (DBU) 

ほかにマネージド ディスク、Blob Storage、パブリック IP アドレスにも少額だが課金される。

>Azure Databricks の価格
https://azure.microsoft.com/ja-jp/pricing/details/databricks/

ちなみに14日間の「試用版」を利用した場合は、DBUに対する課金が免除。
一方、VMに対しては通常通り課金されるため注意が必要。

（Azureではない）Databricksであれば14日間、コンピューティングリソースも含めて無償で試せる。インターフェイスはAzure DatabricksもDatabricksも同じなので、こちらを試しても良いと思う。
https://databricks.com/try-databricks

### 言語
ノートブックを作成するタイミングで、Python, Scala, SQL, Rから選択できる。
Databricks Magic commandを利用することで、ノートブック内に複数の言語を混在させることも可能。
（セルの頭に %python と書いておくと、そのセルはpythonで実行してくれるなど）

# Azure PortalからDatabricksを作成
普通にAzure Portalから検索して作成すれば、特に迷うことはない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/efa434c4-3dcb-f071-0d1d-c9ce2f560242.png)

一点だけ、価格レベルをStandardにするかPremiumにするか迷うが、【ノートブック、ユーザー、およびクラスター構成は保持】した状態で、後で価格レベルの変更も可能らしいので、あまり神経質にならなくてよい。なおPremiumではアクセス制御や認証、監査ログの機能が強化される。

>Azure Databricks ワークスペースのアップグレードまたは ダウングレード
https://docs.microsoft.com/ja-jp/azure/databricks/administration-guide/account-settings/account#upgrade-or-downgrade-an-azure-databricks-workspace

それと前述した通り、試用版を選んで使いまくっていると、VM料金でしっかり課金されるので注意。（DBU課金は免除）

# Databricksでクラスタを作成
Databricksの展開が完了したら、リソースに移動してワークスペースを起動。
Databricksの画面からClustersを選択し、Create Clusterする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/9c73845a-35be-4cbe-bb55-8f2838c73c4f.png)

プロビジョニングするVMの種類や数などを設定してClusterを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/072c6e4b-1639-efbb-3c1e-3e8075520814.png)

# DatabricksのクラスタにMeCabをインストール
作成したClusterに対して、詳細画面からLibraryのインストールが可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/de0b1fc5-cc22-9301-626c-9820b6ea6b33.png)

あとはPyPIなどでパッケージをインストールすればOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/200e3cae-dc49-da03-6614-1e8fff0a0b91.png)

できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/b4ea7a90-4ffd-76fd-21bf-1b282eb76adc.png)

# WorkspaceからNotebookを作成して使う
Workspace > Create > Notebook から、PythonでNotebookを作成。
あとはimport MeCabで形態素解析できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/17b86069-178e-d691-260c-c5951d6214ed.png)

# まとめ
FunctionsでPythonを使う場合と比較すると、全てWebで完結するので設定がすごく楽だった。
複数の担当者で管理する場合も、ローカル環境を合わせたりする必要もないので楽。

### 費用
デフォルトで指定されているインスタンス「DS3 v2」の費用は以下の通り。
インスタンスが起動されている時間（分単位）で課金される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/5a0fade7-5766-ab3c-e683-02354b0a25b1.png)

高負荷でスケールアウトされ、例えばコンピュートノード（Worker）の数が2倍になると課金額も2倍に増える。
（VMもDBUも費用が2倍になる）

>Azure Databricks の価格
https://azure.microsoft.com/ja-jp/pricing/details/databricks/