在AWS上新的ETL工具中使用诸如numpy和pandas等软件包的最简单方法是什么?我在Python中有一个完整的脚本我想在AWS Glue中运行,它利用了numpy和pandas。
答案 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软件包。因此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
答案 2 :(得分:2)
当您单击运行作业时,您有一个默认折叠的作业参数(可选),当我们点击它时,我们有以下选项可以用来保存s3中的库,这对我有用: / p>
Python库路径
S3://桶名/文件夹名/文件名
依赖的罐子路径
S3://桶名/文件夹名/文件名
引用文件路径 S3://桶名/文件夹名/文件名
答案 3 :(得分:2)
自2019年以来,所选择的答案不再正确
awswrangler
是您所需要的。
它允许您在胶水和lambda中使用熊猫
https://github.com/awslabs/aws-data-wrangler
https://aws-data-wrangler.readthedocs.io/en/latest/install.html#setting-up-lambda-layer
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
打包您的scrpt所需的模块。然后上传到你的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库/依赖关系很少被混淆
基本上有两种添加所需软件包的方法
通过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)
到作业参数
使用-additional-python-modules 参数添加所需的库 您可以使用逗号分隔符根据需要指定可能的软件包
很乐意帮助