在 AWS 上名为 Glue 的新 ETL 工具中使用 NumPy 和 Pandas 等包的最简单方法是什么?我在 Python 中有一个完整的脚本,我想在使用 NumPy 和 Pandas 的 AWS Glue 中运行。
12 回答
您可以检查使用此脚本作为粘合作业安装的最新 python 包
import logging
import pip
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
if __name__ == '__main__':
logger.info(pip._internal.main(['list']))
从30-Jun-2020
Glue 开始,这些 python 包已经预装。所以numpy
和pandas
被覆盖。
awscli 1.16.242
boto3 1.9.203
botocore 1.12.232
certifi 2020.4.5.1
chardet 3.0.4
colorama 0.3.9
docutils 0.15.2
idna 2.8
jmespath 0.9.4
numpy 1.16.2
pandas 0.24.2
pip 20.0.2
pyasn1 0.4.8
PyGreSQL 5.0.6
python-dateutil 2.8.1
pytz 2019.3
PyYAML 5.2
requests 2.22.0
rsa 3.4.2
s3transfer 0.2.1
scikit-learn 0.20.3
scipy 1.2.1
setuptools 45.1.0
six 1.14.0
urllib3 1.25.8
virtualenv 16.7.9
wheel 0.34.2
如果它们存在于requirements.txt
用于构建附加的.whl
. 该whl
文件在脚本启动之前被收集和安装。我还建议您研究 Sagemaker Processing,这对于基于 python 的工作来说更容易。与glue-python shell 的无服务实例不同,您不受16gb 限制。
我认为目前的答案是你不能。根据AWS Glue 文档:
只能使用纯 Python 库。尚不支持依赖 C 扩展的库,例如 pandas Python 数据分析库。
但即使我尝试在 S3 中包含一个普通的 python 编写的库,Glue 作业也会因为一些 HDFS 权限问题而失败。如果您找到解决此问题的方法,也请告诉我。
如果您没有纯 Python 库但仍想使用,则可以使用以下脚本在 Glue 代码中使用它:
import os
import site
from setuptools.command import easy_install
install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "<library-name>"] )
reload(site)
import <installed library>
有一个更新:
...您现在可以使用 Python shell 作业... ...AWS Glue 中的 Python shell 作业支持与 Python 2.7 兼容的脚本,并且预加载了 Boto3、NumPy、SciPy、pandas 等库.
https://aws.amazon.com/about-aws/whats-new/2019/01/introducing-python-shell-jobs-in-aws-glue/
当您单击运行作业时,您有一个默认折叠的按钮作业参数(可选),当我们单击它时,我们有以下选项可用于将库保存在 s3 中,这对我有用:
Python 库路径
s3://bucket-name/文件夹名/文件名
依赖 jars 路径
s3://bucket-name/文件夹名/文件名
引用的文件路径 s3://bucket-name/folder-name/file-name
自 2019 年以来,选择的答案不再正确
awswrangler
是你需要的。它允许您在胶水和 lambda 中使用熊猫
https://github.com/awslabs/aws-data-wrangler
使用 AWS Lambda 层安装
https://aws-data-wrangler.readthedocs.io/en/latest/install.html#setting-up-lambda-layer
示例:典型的 Pandas ETL
import pandas
import awswrangler as wr
df = pandas.read_... # Read from anywhere
# Typical Pandas, Numpy or Pyarrow transformation HERE!
wr.pandas.to_parquet( # Storing the data and metadata to Data Lake
dataframe=df,
database="database",
path="s3://...",
partition_cols=["col_name"],
)
2020 年 8 月发布的 AWS Glue 版本 2.0 现在默认安装了 pandas 和 numpy。有关详细信息,请参阅https://docs.aws.amazon.com/glue/latest/dg/reduced-start-times-spark-etl-jobs.html#reduced-start-times-new-features。
AWS GLUE 库/依赖关系并不复杂
添加所需的包基本上有三种方法
方法一
通过 AAWS 控制台 UI/JOB 定义,以下是帮助
操作的几个屏幕 --> 编辑作业然后一直向下滚动并展开
安全配置、脚本库和作业参数(可选)
然后将所有包作为.zip文件添加到 Python 库路径(您需要将 .zip 文件添加到 S3 然后指定路径)
这里的一个问题是您需要确保您的 zip文件必须 在根文件夹中包含init .py
而且,如果您的包依赖于另一个包,那么添加这些包将非常困难。
方法二
以编程方式安装您的软件包(简单)
这是您可以安装所需库的路径
/home/spark/.local/lib/python3.7/site-packages/
**
/home/spark/.local/lib/python3.7/site-packages/
**
这是安装 AWS 包的示例 我在这里安装了 SAGE 标记包
import site
from importlib import reload
from setuptools.command import easy_install
# install_path = site.getsitepackages()[0]
install_path = '/home/spark/.local/lib/python3.7/site-packages/'
easy_install.main( ["--install-dir", install_path, "https://files.pythonhosted.org/packages/60/c7/126ad8e7dfbffaf9a5384ca6123da85db6c7b4b4479440ce88c94d2bb23f/sagemaker-2.3.0.tar.gz"] )
reload(site)
方法3。(建议和清洁)
在安全配置、脚本库和作业参数(可选)部分到作业参数
使用--additional-python-modules参数添加所需的库,您可以根据需要使用逗号分隔符指定包
很高兴能帮助你
如果您要编辑作业(或创建新作业时),则会有一个折叠的可选部分,称为“脚本库和作业参数(可选)”。在那里,您可以为 Python 库(以及其他东西)指定一个 S3 存储桶。我还没有亲自尝试过那部分,但我认为这就是你要找的。
到目前为止,您可以将 Python 扩展模块和库与您的 AWS Glue ETL 脚本一起使用,只要它们是用纯 Python 编写的。目前不支持 Pandas 等 C 库,也不支持用其他语言编写的扩展。
要安装特定版本(例如,对于 AWS Glue python 作业),请导航到包含 python 包的网站,例如包“pg8000”的页面https://pypi.org/project/pg8000/1.12。 5/#文件
然后选择一个合适的版本,将链接复制到文件中,并将其粘贴到下面的代码片段中:
import os
import site
from setuptools.command import easy_install
install_path = os.environ['GLUE_INSTALLATION']
easy_install.main( ["--install-dir", install_path, "https://files.pythonhosted.org/packages/83/03/10902758730d5cc705c0d1dd47072b6216edc652bc2e63a078b58c0b32e6/pg8000-1.12.5.tar.gz"] )
reload(site)
如果您想将 python 模块集成到您的 AWS GLUE ETL 作业中,您可以这样做。你可以使用任何你想要的 Python 模块。
因为 Glue 只不过是带有 Python 运行环境的无服务器。所以你只需要打包你的脚本需要使用的模块pip install -t /path/to/your/directory
。然后上传到您的 s3 存储桶。
在创建 AWS Glue 作业时,在指向 s3 脚本、临时位置后,如果您转到高级作业参数选项,您将在那里看到 python_libraries 选项。
您可以将其指向您上传到 s3 的 python 模块包。