PySparkでデータサイエンス100本ノック

はじめに
Python×Pandasでかれこれ数年やってきましたが、PySparkに入門することにしました。
PySparkの説明はChatGPTや先人達にお任せするとして、今回PySparkをやり始めるモチベーションが何なのかを簡単に説明します。
最近、Linkedinで海外企業の募集要項を眺めていると、SparkやSQLが使えることがデータサイエンティストや機械学習エンジニアの要件になっていることに今更ながら気が付きました。
Pandasだけだとひょっとして技術スタック的に微妙だな?
この辺りでPySparkをやっておけば、ペタバイト級のビッグデータ解析等など、きっと将来役に立つだろうと思った次第です。(実務でその規模のデータを扱う機会があるかは置いておいて…)
書いたコードは以下のGithubにあります。
それでは対戦よろしくお願いします。

前準備
データサイエンス100本ノックのgit clone
何はともあれgit clone
git clone https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess.git
docker buildしてJupyterLabのコンテナを立ち上げます。
cd 100knocks-preprocess
docker compose up -d --build --wait
このコンテナにはPySparkの環境がない&uvのお試しがしたいということで、http://localhost:8888にアクセスして課題のJupyter Notebookだけいただきます。
PySparkインストール
最近になってuvを使い始めたので、練習がてらuvで環境セットアップします
uv init -p 3.13.3
uv venv -p 3.13.3
uv pip install ipykernel pyspark numpy
JDKインストール
PySparkをインストールすればそのまま使えるのかと思いましたが、スクリプト実行時にJDKがないとエラーになることが分かったのでインストールします。
インストールするバージョンですが、PySparkが最新の24系に対応してないらしいので、対応している中では新しい方の17系をインストールします。
これにて準備完了。あとはガシガシ解いていきます。

PySparkのOneHotEncoderをImport時にエラー
P-058: 顧客データ(df_customer)の性別コード(gender_cd)をダミー変数化し、顧客ID(customer_id)とともに10件表示せよ。
ここでOneHotEncoderをImportしたところ...
from pyspark.ml.feature import OneHotEncoder
ModuleNotFoundError: No module named 'distutils'
あーこれなんだっけと思って調べたところ、Python 3.12からdistuitlsが廃止された影響によるものでした。
uv pip install setuptools
setuptoolsをインストールすると解決。
別のライブラリをインポートしようと思ったときにやり方調べたものの、その後しばらく見てなかったのでで備忘録。