我在 Glue v2 Spark 作业中遇到了这个问题,而不是另一个答案详细讨论的 Python shell 作业。
AWS 文档说没有必要压缩单个 .py 文件。不过,我还是决定使用.zip 文件。
我的.zip 文件包含以下内容:
Archive: utils.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Defl:N 5 0% 01-01-2049 00:00 00000000 __init__.py
6603 Defl:N 1676 75% 01-01-2049 00:00 f4551ccb utils.py
-------- ------- --- -------
6603 1681 75% 2 files
请注意,__init__.py 存在,并且使用 Deflate(通常的 zip 格式)压缩存档。
在我的 Glue 作业中,我添加了 referenced files path 作业参数,指向我在 S3 上的 zip 文件。
在作业脚本中,我需要将我的 zip 文件显式添加到 Python 路径中,然后才能进行导入。
import sys
sys.path.insert(0, "utils.zip")
import utils
未能执行上述操作会导致ImportError: No module named 错误。
对于其他为此苦苦挣扎的人,检查以下变量有助于我调试问题并得出解决方案。粘贴到您的 Glue 作业并在 Cloudwatch 中查看结果。
import sys
import os
print(f"os.getcwd()={os.getcwd()}")
print(f"os.listdir('.')={os.listdir('.')}")
print(f"sys.path={sys.path}")