如何在 AWS Glue 中使用外部 Python 库?

Mar*_*and 4 python amazon-web-services openpyxl aws-glue

这里的第一个堆栈溢出问题。希望我能正确地做到这一点:

我需要在 AWS 胶中使用外部 python 库。“Openpyxl”是库的名称。

我遵循以下说明:https : //docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html

但是,在我将 zip 文件保存在正确的 s3 位置并将我的胶水作业指向该位置后,我不确定要在脚本中实际写入什么内容。

我尝试了您的典型Import openpyxl,但这只会返回以下错误:

ImportError: No module named openpyxl
Run Code Online (Sandbox Code Playgroud)

显然我不知道在这里做什么 - 对编程也相对较新,所以我不确定这是一个菜鸟问题还是什么。提前致谢!

小智 9

这取决于工作是 Spark 还是 Python Shell。对于 Spark,您只需要压缩库,然后当您将作业指向库 S3 路径时,作业将导入它。您只需要确保 zip 包含此文件:__init__.py

例如,对于您尝试导入的库,如果您从https://pypi.org/project/openpyxl/#files下载它,您可以将文件夹openpyxl压缩到openpyxl-3.0.0.tar.gz 中,并将其存储在 S3 中。


另一方面,如果它是 Python Shell 作业,则 zip 文件将不起作用。您需要从库中创建一个egg文件。如果您使用的是这个版本的 openpyxl-3.0.0,那么您可以从同一个网站下载它,提取所有内容,然后运行命令python setup.py bdist_eggpython3而不是python,如果您使用 python3 代替。

这将在文件夹中生成一个egg文件,dist该文件也会生成。您只需将该蛋文件放在 S3 中,并将 Glue Job Python 库指向该路径。

如果您已经拥有该库,但由于某种原因没有 . setup.py,那么您必须创建它才能运行命令来生成 egg 文件。请参考http://www.blog.pythonlibrary.org/2012/07/12/python-101-easy_install-or-how-to-create-eggs/。在那里你可以找到一个例子。

  • 对于python shell,不需要下载并捆绑在egg文件中。您可以在 `setup.py` 中使用 `install_requires=['openpyxl==3.0.0']` ,它将在执行过程中下载并安装在glue中。 (2认同)

grn*_*rnc 7

您现在可以(从 Glue 版本 2 开始)使用--additional-python-modules参数直接添加外部库。

例如,要更新或添加新的 scikit-learn 模块,请使用以下键/值:

"--additional-python-modules", "scikit-learn==0.21.3"

更多详细信息可以在文档中找到。

  • 它不起作用,它仍然没有给出模块错误。有什么帮助吗? (5认同)