本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Python 库与 EMR Serverless 结合使用
在 Amazon EMR Serverless 应用程序上运行 PySpark 作业时,可以将各种 Python 库打包为依赖项。为此,您可以使用 Python 原生功能、构建虚拟环境或直接配置 PySpark 作业以使用 Python 库。本页涵盖了每种方法。
使用 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 位置。重要
您必须在类似的 Amazon Linux 2 环境中运行以下命令,并使用与 EMR Serverless 中所用版本相同的 Python,即适用于 Amazon EMR 6.6.0 的 Python 3.7.10。您可以在 EMR Serverless Samples
GitHub 存储库中找到示例 Dockerfile。 # 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 -
提交 Spark 作业,并将属性设置为使用 Python 虚拟环境。
--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 二进制文件,前面设置序列中的第二个配置将是
--conf spark.executorEnv.PYSPARK_PYTHON=python
。有关如何使用 Python 虚拟环境进行 PySpark 作业的更多信息,请参阅使用 Virtualenv
。有关如何提交 Spark 作业的更多示例,请参阅 运行EMR无服务器作业时使用 Spark 配置。
配置 PySpark 作业以使用 Python 库
在 Amazon EMR 6.12.0 及更高版本中,您可以直接配置 EMR Serverless PySpark 作业,以使用流行的数据科学 Python 库,比如 pandas
以下示例展示了如何为 PySpark 作业打包每个 Python 库。