AWS Glue Python

时间:2017-09-20 18:42:50

标签: python pandas amazon-web-services aws-lambda aws-glue

在AWS上新的ETL工具中使用诸如numpy和pandas等软件包的最简单方法是什么?我在Python中有一个完整的脚本我想在AWS Glue中运行,它利用了numpy和pandas。

12 个答案:

答案 0 :(得分:9)

我认为目前的答案是你不能。根据{{​​3}}:

  

只能使用纯Python库。尚不支持依赖C扩展的库,例如pandas Python数据分析库。

但即使我尝试在S3中包含一个普通的python编写的库,由于某些HDFS权限问题,Glue作业也失败了。如果您找到解决方法,请告诉我。

答案 1 :(得分:7)

您可以检查使用此脚本作为胶水作业安装的最新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起,已预先安装了这些python软件包。因此numpypandas被覆盖。

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

答案 2 :(得分:2)

当您单击运行作业时,您有一个默认折叠的作业参数(可选),当我们点击它时,我们有以下选项可以用来保存s3中的库,这对我有用: / p>

Python库路径

S3://桶名/文件夹名/文件名

依赖的罐子路径

S3://桶名/文件夹名/文件名

引用文件路径 S3://桶名/文件夹名/文件名

答案 3 :(得分:2)

自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

示例:典型的熊猫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"],
)

答案 4 :(得分:1)

如果您要编辑作业(或创建新作业),则会有一个可选的部分,称为"脚本库和作业参数(可选)"。在那里,您可以为Python库指定一个S3存储桶(以及其他东西)。我还没有尝试过这个部分,但我认为这就是你要找的东西。

答案 5 :(得分:1)

有一个更新:

...您现在可以使用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/

答案 6 :(得分:1)

如果您没有纯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>

答案 7 :(得分:0)

如果您想将python模块集成到AWS GLUE ETL作业中,您可以这样做。您可以使用任何您想要的Python模块。 因为Glue在Python运行环境中只是无服务器。因此,您只需使用pip install -t /path/to/your/dircetory打包您的sc​​rpt所需的模块。然后上传到你的s3存储桶。 在创建AWS Glue作业时,在指向s3脚本,临时位置后,如果转到高级作业参数选项,则会在那里看到python_libraries选项。 enter image description here 你可以指出你上传到s3的python模块包。

答案 8 :(得分:0)

到目前为止,您可以将Python扩展模块和库与AWS Glue ETL脚本一起使用,只要它们是用纯Python编写的即可。目前不支持熊猫等C库,也不支持使用其他语言编写的扩展。

答案 9 :(得分:0)

要安装特定版本(例如,用于AWS Glue python作业),请导航至带有python软件包的网站,例如到软件包“ pg8000”的页面{{3} }

然后选择合适的版本,将链接复制到文件,然后将其粘贴到下面的代码段中:

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)

答案 10 :(得分:0)

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

答案 11 :(得分:0)

AWS GLUE库/依赖关系很少被混淆

基本上有两种添加所需软件包的方法

方法1

  1. 通过AAWS控制台UI / JOB定义,以下是一些帮助的屏幕
    动作->编辑作业

    enter image description here

    然后一直向下滚动并展开

    安全配置,脚本库和作业参数(可选)

    然后将所有包作为 .zip 文件添加到Python库路径 (您需要将.zip文件添加到S3,然后指定路径)

    这里有一个问题,您需要确保您的zip 文件中必须包含 init .py在根文件夹中

    enter image description here

而且,如果您的软件包依赖于另一个软件包,那么添加这些软件包将非常困难。

方法2

以编程方式安装软件包(简易安装)

这是可以在其中安装所需库的路径

/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 参数添加所需的库 您可以使用逗号分隔符根据需要指定可能的软件包 enter image description here

很乐意帮助