

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# EMR Serverless での Python ライブラリの使用
<a name="using-python-libraries"></a>

Amazon EMR Serverless アプリケーションで PySpark ジョブを実行する際に、さまざまな Python ライブラリを依存関係としてパッケージ化します。これを行うには、ネイティブ Python 機能を使用するか、仮想環境を構築するか、Python ライブラリを使用するように PySpark ジョブを直接設定します。このページでは、それぞれの方法について説明します。

## ネイティブ Python 機能の使用
<a name="using-native-python-features"></a>

以下の設定を行うと、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 仮想環境を使用する方法の詳細については、「[Using PySpark Native Features](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-pyspark-native-features)」を参照してください。

EMR Notebook を使用する場合、次のコードを実行して、Python 依存関係を Notebook で使用できるようにできます。

```
    %%configure -f
 {
    "conf": {
    "spark.submit.pyFiles":"s3:///amzn-s3-demo-bucket/EXAMPLE-PREFIX/<.py|.egg|.zip file>
                   }
 }
```

## Python 仮想環境の構築
<a name="building-python-virtual-env"></a>

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](https://github.com/aws-samples/emr-serverless-samples/tree/main/examples/pyspark/dependencies) 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
   ```

1. 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](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-virtualenv)」を参照してください。Spark ジョブを送信する方法の例については、「[EMR Serverless ジョブ実行時の Spark 設定の使用](jobs-spark.md)」を参照してください。

## Python ライブラリを使用するように PySpark ジョブを設定する
<a name="configuring-pyspark-jobs"></a>

Amazon EMR リリース 6.12.0 以降では、新たにセットアップをしなくても、[pandas](https://pandas.pydata.org/docs/user_guide/index.html)、[NumPy](https://numpy.org/doc/stable/user/index.html)、[PyArrow](https://arrow.apache.org/docs/python/index.html) といった一般的なデータサイエンス向けの Python ライブラリを使用するように、直接 EMR Serverless PySpark ジョブを設定できます。

次の例は、PySpark ジョブで各 Python ライブラリをパッケージ化する方法をデモンストレーションしています。

------
#### [ NumPy ]

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

```
import numpy
```

------
#### [ pandas ]

pandas は、NumPy に構築された Python ライブラリです。pandas ライブラリは、[DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) データ構造とデータ分析ツールをデータサイエンティストに提供します。pandas を使用するには、次のコマンドを実行します。

```
import pandas
```

------
#### [ PyArrow ]

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

```
import pyarrow
```

------