Azure Databricksに触ったことのない私が、環境をいちから準備してPySparkでデータ分析をしてみよう! と試みた記事です。出来なかったこと、エラーで困ったことも含めて文章に残しておこうと思います。
1. アカウント作成からノートブックへの移動まで。
まずAzureの無料アカウントに登録する必要があります。
https://azure.microsoft.com/ja-jp/pricing/purchase-options/azure-account?icid=databricks
クレジットカード番号を入力する必要がありますが、利用者の許可なく従量課金されることはないとのことなので、許可しない限り無料で使用できると思います。
無料アカウントの作成が完了したら、画像の "作成" ボタンからワークスぺースを作成します。

価格レベルを "試用版" に設定さえすれば、ワークスペース名等はてきとうでよい気がします。(あくまでPythonコードを動かしてみることが目的なので。)

ネットワーク、暗号化設定も細かくできるようですが、今回はデフォルトの設定のままでよいです。"確認および作成" を押下し、3~4分待つとワークスペースが作成されます。
作成が完了したら、"ワークスペースの起動" ⇨ "+新規" からノートブックボタンを押下すると、コードが記載できる場所に移動できます。
2. Pythonコードを書いてみる。Azure Databricksの魅力。
今回は用意されているサンプルデータを使って、Apache Spark(PySpark)でデータをいじってみます。サンプルデータは "sales_customers" を使用しました。
df = spark.table("samples.bakehouse.sales_customers")
df.printSchema()
df.show(5)上記のコードでデータを取り込み、データ構造の把握をします。データ取り込み時には、スキーマ名まで明記して取り込みます。
Azure Databricksでは実行したコードに間違いがあると、自動でコードの診断が始まり改善案を提案してくれます。

また "診断エラー" ボタンを押下すると、アシスタント(Copilot的なもの)がコードの解説をしてくれます。私はこの点がAWSなどと比べてかなり魅力に思えました。
3. 引き続きコードを書いていく。
データセットに欠損値がどの程度あるか見てみます。
PySparkではPandasのようにnull値が格納されている行を抽出する処理を書くのがめんどう(カラム名をいちいち明示する必要がある。あるいはループ処理でなんとかする。)なので、今回のように小規模データであるならばPandasに変換して欠損を確認する方法が楽です。
PySparkデータフレームから一時テーブルを作成してSQLで処理をする方法もありますが、どっちみち処理をたくさん書く必要が出てきそうだと思いました。
データ量を確認し、Pandasのデータフレームに変換をします。
df.count() #300行だった。
pdf = df.toPandas() pdf.isnull().sum()
null値がないことを確認できました。
後々機械学習を実装したいので、目的変数とするであろう "country" カラムの値をラベルエンコーディング(カテゴリ変数を数値へ変換)してみます。
pdf["country"].unique()
pdf["country"] = pdf["country"].astype("category")
pdf["country_code"] = pdf["country"].cat.codes※PandasのデータフレームをPysparkのデータフレームへ変換して、StringIndexerでエンコーディングを実施しようとしたところ、"Py4Jセキュリティ制御によるエラー" が出ました。解決できず今回は諦めてPandasで処理しました。
ついでに "postal_zip_code" が数値型扱いになっているので、文字列型に変換します。(こちらは郵便番号なので文字列型が適当。)
df_pandas["postal_zip_code"] = df_pandas["postal_zip_code"].astype("object")※後に実行するPySparkのcreateDataFrame()は、型推論を行いPandasのデータフレームへ変換するため、Pandas側で型を整理したもののPySparkへのデータフレーム変換時に型が変更されてしまうことがある。
PandasのデータフレームをPySparkのデータフレームに変換し直します。次の回で機械学習を実装したいので、必要となるカラムのみを選択してデータフレームへの変換を行います。
pdf_selected = pdf[["city", "state", "postal_zip_code", "country_code"]] df_spark = spark.createDataFrame(pdf_selected) df_spark.show(5)
最後に作成したデータフレームをテーブルとして保存します。私はワークスペース作成時にリソースグループ名(ワークスペース名)を "test" に設定していたので、カタログ内に自動で "test" というスキーマが作成されています。"test" の "default" スキーマにテーブルを出力させます。
df_spark.write.mode("overwrite").saveAsTable("test.default.my_table")次回も引き続き、機械学習を実装するための前処理を行っていきます!