EMR Serverless での Python ライブラリの使用
Amazon EMR Serverless アプリケーションで PySpark ジョブを実行する際に、さまざまな Python ライブラリを依存関係としてパッケージ化できます。これを行うには、ネイティブ Python 機能を使用するか、仮想環境を構築するか、Python ライブラリを使用するように PySpark ジョブを直接設定します。このページでは、それぞれの方法について説明します。
ネイティブ Python 機能の使用
以下の設定を行うと、PySpark を使用して Python ファイル (.py
)、圧縮 Python パッケージ (.zip
)、および Egg ファイル (.egg
) を Spark エグゼキューターにアップロードできます。
--conf spark.submit.pyFiles=s3://
amzn-s3-demo-bucket
/EXAMPLE-PREFIX
/<.py|.egg|.zip file>
PySpark ジョブで Python 仮想環境を使用する方法の詳細については、「PySpark ネイティブ機能の使用
Python 仮想環境の構築
PySpark ジョブの Python ライブラリをパッケージ化するために、独立した Python 仮想環境を構築できます。
-
Python 仮想環境を構築するには、次のコマンドを実行します。次の例では、
scipy
パッケージとmatplotlib
パッケージを仮想環境パッケージにインストールし、アーカイブを Amazon S3 の場所にコピーします。重要
EMR Serverless で使用するのと同じバージョンの Python、つまり Amazon EMR リリース 6.6.0 用の Python 3.7.10 を使用して、同様の Amazon Linux 2 環境で、次のコマンドを実行する必要があります。Dockerfile の例は、EMR Serverless Samples
GitHub リポジトリにあります。 # initialize a python virtual environment python3 -m venv pyspark_venvsource source pyspark_venvsource/bin/activate # optionally, ensure pip is up-to-date pip3 install --upgrade pip # install the python packages pip3 install scipy pip3 install matplotlib # package the virtual environment into an archive pip3 install venv-pack venv-pack -f -o pyspark_venv.tar.gz # copy the archive to an S3 location aws s3 cp pyspark_venv.tar.gz s3://
amzn-s3-demo-bucket
/EXAMPLE-PREFIX
/ # optionally, remove the virtual environment directory rm -fr pyspark_venvsource -
Python 仮想環境を使用するようにプロパティを設定し、Spark ジョブを送信します。
--conf spark.archives=s3://
amzn-s3-demo-bucket
/EXAMPLE-PREFIX
/pyspark_venv.tar.gz#environment --conf spark.emr-serverless.driverEnv.PYSPARK_DRIVER_PYTHON=./environment/bin/python --conf spark.emr-serverless.driverEnv.PYSPARK_PYTHON=./environment/bin/python --conf spark.executorEnv.PYSPARK_PYTHON=./environment/bin/python元の Python バイナリを上書きしない場合、前述の一連の設定で 2 番目の設定が
--conf spark.executorEnv.PYSPARK_PYTHON=python
になることに注意してください。PySpark ジョブに Python 仮想環境を使用する方法の詳細については、「Using Virtualenv
」を参照してください。Spark ジョブを送信する方法の例については、「EMR Serverless ジョブ実行時の Spark 設定の使用」を参照してください。
Python ライブラリを使用するように PySpark ジョブを設定する
Amazon EMR リリース 6.12.0 以降では、新たにセットアップをしなくても、pandas
次の例は、PySpark ジョブで各 Python ライブラリをパッケージ化する方法を示しています。