将 Python 库与 EMR Serverless 结合使用 - Amazon EMR

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 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 虚拟环境。

  1. 要构建 Python 虚拟环境,请使用以下命令。所示示例将 scipymatplotlib 包安装到虚拟环境包中,并将存档复制到 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
  2. 提交 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 库,比如 pandasNumPyPyArrow,而无需任何额外设置。

以下示例展示了如何为 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