将AWS Glue Python与NumPy和Pandas Python包一起使用

将AWS Glue Python与NumPy和Pandas Python包一起使用,python,pandas,amazon-web-services,aws-lambda,aws-glue,Python,Pandas,Amazon Web Services,Aws Lambda,Aws Glue,在AWS上名为Glue的新ETL工具中使用NumPy和Pandas等包的最简单方法是什么?我在Python中有一个完整的脚本,我想在AWS Glue中运行,它利用NumPy和Pandas。如果您要编辑作业(或在创建新作业时),有一个可选部分被折叠,称为“脚本库和作业参数(可选)”。在这里,您可以为Python库(以及其他东西)指定一个S3存储桶。我还没有亲自尝试过这一部分,但我认为这就是您想要的。当您单击“运行作业”时,您有一个默认折叠的按钮作业参数(可选),当我们单击它时,我们可以使用以下选项

在AWS上名为Glue的新ETL工具中使用NumPy和Pandas等包的最简单方法是什么?我在Python中有一个完整的脚本,我想在AWS Glue中运行,它利用NumPy和Pandas。

如果您要编辑作业(或在创建新作业时),有一个可选部分被折叠,称为“脚本库和作业参数(可选)”。在这里,您可以为Python库(以及其他东西)指定一个S3存储桶。我还没有亲自尝试过这一部分,但我认为这就是您想要的。

当您单击“运行作业”时,您有一个默认折叠的按钮作业参数(可选),当我们单击它时,我们可以使用以下选项在s3中保存库,这对我来说很有用:

Python库路径

s3://存储桶名称/文件夹名称/文件名

依赖jars路径

s3://存储桶名称/文件夹名称/文件名

引用文件路径
s3://bucket name/folder name/file name

我认为当前的答案是您不能。根据:

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


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

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

现在,您可以将python扩展模块和库与AWS Glue ETL脚本一起使用,只要它们是用纯python编写的。目前不支持pandas之类的C库,也不支持用其他语言编写的扩展。

有一个更新:

…您现在可以使用Python shell作业。。。 …AWS Glue中的Python外壳作业支持与Python 2.7兼容的脚本,并预装有Boto3、NumPy、SciPy、pandas等库


如果您没有纯python库,但仍希望使用,则可以使用以下脚本在粘合代码中使用它:

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>
导入操作系统
导入站点
从setuptools.command导入轻松安装
install\u path=os.environ['GLUE\u INSTALLATION']
easy_install.main([“--install dir”,install_path,”]))
重新加载(站点)
进口

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

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

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)

自2019年以来,选择的答案不再正确

awswrangler
是您所需要的。 它可以让你在胶水和lambda中使用熊猫

使用AWS Lambda层安装

示例:典型的ETL
您可以使用此脚本作为粘合作业来检查安装的最新python包

import logging
import pip
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

if __name__ == '__main__':
    logger.info(pip._internal.main(['list']))
自2020年6月30日起,这些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


如果用于构建附加
.whl
requirements.txt
中存在其他包,则可以在glue python中安装这些包。脚本启动之前,将收集并安装
whl
文件。我还建议您研究Sagemaker处理,这对于基于python的作业来说更容易。与glue python shell的Servless实例不同,这里的限制不限于16gb。

2020年8月发布的AWS glue 2.0版现在默认安装了pandas和numpy。
有关详细信息,请参阅。

AWS胶水库/依赖关系有点复杂

基本上有三种方法可以添加所需的包

方法1
  • 通过AAWS控制台UI/作业定义,以下是一些可提供帮助的屏幕
    操作-->编辑作业

    然后一直向下滚动并展开

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

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

    这里需要注意的一点是,您需要确保zip文件必须包含 根文件夹中的init.py

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

    方法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。(建议清洁) 在安全配置、脚本库和作业参数(可选)部分下,转到作业参数

    使用--附加python模块参数添加所需的库 可以根据需要使用逗号分隔符指定任意包


    很乐意提供帮助

    如果您有许多要包含的模块,您可以将它们归档到单个ZIP文件中,并附加到“脚本库和作业参数”参数上
    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)