我有一个用python编写的ETL作业,它由多个具有以下目录结构的脚本组成;
my_etl_job
|
|--services
| |
| |-- __init__.py
| |-- dynamoDB_service.py
|
|-- __init__.py
|-- main.py
|-- logger.py
main.py
是从上述目录中导入其他脚本的入口点脚本。在由开发端点创建的ETL群集上载后,以上代码在开发端点上运行良好。从现在开始,我要在生产中运行它,我想为其创建一个合适的胶水作业。但是,当我以my_etl_job
格式压缩整个目录.zip
时,将其上载到工件s3存储桶中,并按如下所示将.zip文件位置指定到脚本位置
s3://<bucket_name>/etl_jobs/my_etl_job.zip
这是我在胶水作业UI仪表板上看到的代码;
PK
���P__init__.pyUX�'�^"�^A��)PK#7�P logger.pyUX��^1��^A��)]�Mk�0����a�&v+���A�B���`x����q��} ...AND ALLOT MORE...
似乎胶水作业不接受.zip格式?如果是,那我应该使用哪种压缩格式?
更新:
我检查出胶水作业可以选择接收额外的文件Referenced files path
,在其中我提供了上述文件所有路径的逗号分隔列表,并更改了script_location使其仅引用main.py
文件路径。但这也不起作用。胶水作业引发错误,没有找到记录器模块(我在logger.py文件中定义了该模块)
答案 0 :(得分:1)
您必须将zip文件作为额外的python lib传递,或为代码包构建一个wheel软件包并将zip或wheel上载到s3,并提供与Extra python lib选项相同的路径
注意:将自己的主要功能自己写在胶水控制台中,从压缩/滚轮依赖性中引用所需的功能,您的脚本位置永远不应是zip文件
https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html
答案 1 :(得分:1)
my_etl_job
|
|--corelib
| |
| |--__init__.py
| |-- services
| |
| | -- dynamoDB_service.py
| | -- logger.py
|
|-- main.py
然后可以将main.py中的dynamodbservices模块导入为corelib.services.dynamoDB_service。 准备库时,只需转到corelib之前的文件夹并按如下所示压缩文件夹
zip -r corelib.zip corelib/
然后您可以将crelib.zip作为额外的文件添加到胶水中。 (您可以根据自己的喜好准备一个滚轮文件)