実行環境
OS: Microsoft Windows 11 Pro 10.0.26100
Apache Spark: 3.5.4
JDK: 11.0.20
仮想環境: conda
Python: 3.8.20
発生した事象
Anaconda navigator より JupyterNotebook を起動してコードを実行すると df.show が上手くいかない
他のデータフレーム作成などは問題なく動作する...
エラーの一部抜粋
"name": "Py4JJavaError",
"message": "An error occurred while calling o43.showString...
エラー原因
Apache spark は Worker と Driver、それらを管理する Manager で構成されています。
今回は、Pyspark の Driver と Worker に内包される Executor で異なる Python バージョンを使用しているためエラーが発生。(たぶん)
解決方法
DriverとExecutorのPythonバージョンを環境変数で明示的に指定して上げる事で解決できます。
今回はcondaの仮想環境内でのみ有効化したいので、conda仮想環境の有効化時に変数を作成するようにして解決したいと思います。
1. 仮想環境の activate.d 内に sp1 スクリプトを作成
activate.d は初期なら以下にあるはず。
はcondaの仮想環境名で置換してください。
C:\Users\%USERNAME%\anaconda3\envs\<condaの仮想環境名>\etc\conda\activate.d
仮想環境名はPowershell上で以下のコマンドを通せば確認できる
conda env list
※baseはデフォルトでそれ以外がユーザーの作成した環境、左に記載のあるのがcondaの仮想環境名
2. activate.d ディレクトリ内に環境変数を設定するスクリプトを作成
activate.d ディレクトリ内で拡張子が ps1 であればファイル名は何でもよいです。
今回は set_env_vars.ps1 で作成しました。
ファイルを開いて以下のスクリプトを記述します
はcondaの仮想環境名で置換してください。
# 環境変数の設定
$env:PYSPARK_PYTHON = "C:\Users\%USERNAME%\anaconda3\envs\<condaの仮想環境名>\python.exe"
$env:PYSPARK_DRIVER_PYTHON = "C:\Users\%USERNAME%\anaconda3\envs\<condaの仮想環境名>\python.exe"
設定は以上です、仮想環境を再起動して df.show() を行ったら無事成功しました。
本記事がトラブルシューティングの一助になれば幸いです。