EMR Serverless での Python ライブラリの使用 - Amazon EMR

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 仮想環境を構築できます。

  1. 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
  2. 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 以降では、新たにセットアップをしなくても、pandasNumPyPyArrow といった一般的なデータサイエンス向けの Python ライブラリを使用するように、直接 EMR Serverless PySpark ジョブを設定できます。

次の例は、PySpark ジョブで各 Python ライブラリをパッケージ化する方法を示しています。

NumPy

NumPy は、数学、並べ替え、ランダムシミュレーション、基本統計のための多次元配列とオペレーションを提供する科学計算用の Python ライブラリです。NumPy を使用するには、次のコマンドを実行します。

import numpy
pandas

pandas は、NumPy 上に構築された Python ライブラリです。pandas ライブラリは、DataFrame データ構造とデータ分析ツールをデータサイエンティストに提供します。pandas を使用するには、次のコマンドを実行します。

import pandas
PyArrow

PyArrow は、ジョブのパフォーマンスを向上させるためにインメモリ列指向データを管理する Python ライブラリです。PyArrow は、Apache Arrow のクロス言語開発仕様に基づいています。これは、データを列指向形式で表現して交換するための標準的な方法です。PyArrow を使用するには、次のコマンドを実行します。

import pyarrow