AWS Glue:ModuleNofFoundError

AWS Glue: ModuleNofFoundError

在我的胶水脚本(Spark 3.1、Python 3、Glue 3)中,我正在尝试使用 pandas 库中的 df.to_excel() 函数。显然 pandas 库依赖于 openpyxl。我的代码是:

import sys
import boto3
import openpyxl
import pandas as pd

client = boto3.client('s3')
obj = client.get_object(Bucket = 'myBucketName', Key = 'myFileName.csv')

df = pd.read_csv(obj['Body'])

df.to_excel("output.xlsx", sheet_name='my-sheet-name')

我遇到的问题是出现错误:ModuleNotFoundError: No module named 'openpyxl'

我在下面找到解释如何添加外部 python 库的链接:
https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-python-extra-library

显然我做错了什么,因为它对我不起作用。我的步骤是:

  1. 在本地创建 setup.py 文件:

    从设置工具导入设置

    设置( 名称=“openpyxl”, 版本=“3.0.7”, install_requires=['openpyxl'] )

  2. 在我的本地目录py setup.py develop执行(我在Windows,我的python版本是3.9.7)

  3. 在我的本地目录下执行py setup.py bdist_egg

  4. 将文件 ../dist/openpyxl-3.0.7-py3.9.egg 复制到我的 s3 存储桶中

  5. 在我的胶水作业中,我将文件位置放在 Python library path


我做错了什么?我错过了什么?
提前致谢!

在较新版本的 glue 中,您可以跳过 egg/wheel 方法并在运行时安装。在作业参数中放置一个键“--additional-python-modules”并在值中放置“openpyxl,pandas”。

https://aws.amazon.com/blogs/big-data/building-python-modules-from-a-wheel-for-spark-etl-workloads-using-aws-glue-2-0/