如何在AWS Glue 1.0中安装非标准Python库praw与nltk?
解决AWS Glue 1.0 Python Shell安装praw和nltk的问题
方案1:正确配置--additional-python-modules(部分场景可行)
- 需明确列出所有依赖包,用逗号分隔,避免因依赖缺失导致安装失败,示例参数值:
praw==7.6.1,update-checker==0.18.0,websocket-client==1.5.1,nltk==3.8.1 - 注意:如果Glue作业所在VPC无公网访问权限,需配置VPC端点访问PyPI或使用内部镜像源,否则该方案大概率失效,优先选择本地打包方案。
方案2:本地打包带全依赖的压缩包(最可靠)
步骤1:匹配Glue 1.0的Python环境
- 基于Python 3.6创建虚拟环境,避免本地环境干扰:
python3.6 -m venv glue-venv source glue-venv/bin/activate # Linux/macOS # Windows系统执行:glue-venv\Scripts\activate
步骤2:安装目标库到本地目录
- 用
pip install指定安装目录,自动拉取所有依赖:pip install praw==7.6.1 nltk==3.8.1 -t ./glue-libs
步骤3:打包为zip文件(Glue原生支持,比.egg更简便)
- 进入
glue-libs目录,打包内部所有文件和子目录:cd glue-libs zip -r ../glue-deps.zip . - 注意:不要将
glue-libs目录本身打包,确保压缩包内直接是库文件。
步骤4:上传并配置Glue作业
- 将
glue-deps.zip上传至你的S3存储桶,例如路径:s3://your-bucket/glue-deps/glue-deps.zip - 在Glue作业的作业参数中添加:
- 参数名:
--extra-py-files - 参数值:
s3://your-bucket/glue-deps/glue-deps.zip
- 参数名:
- 保存作业后重新运行即可。
补充:nltk数据集的处理
若代码需要nltk的数据集(如punkt、stopwords),需额外操作:
- 本地下载数据集:在虚拟环境中执行
python -m nltk.downloader punkt stopwords - 找到本地
nltk_data目录(通常在~/nltk_data或虚拟环境的share/nltk_data),将tokenizers/punkt和corpora/stopwords目录打包为nltk-data.zip - 上传该zip到S3,在
--extra-py-files参数中追加路径,用逗号分隔:s3://your-bucket/glue-deps/glue-deps.zip,s3://your-bucket/glue-deps/nltk-data.zip - 在代码中设置nltk数据路径:
import nltk import os nltk.data.path.append(os.path.join(os.environ['SPARK_HOME'], 'python', 'lib', 'nltk_data'))
关于.egg文件的说明
.egg是较旧的Python打包格式,现在更推荐用zip。若坚持用.egg,步骤如下:
- 安装setuptools:
pip install setuptools - 在
glue-libs目录下创建setup.py:from setuptools import setup, find_packages setup( name='glue-deps', version='1.0', packages=find_packages(), include_package_data=True, ) - 执行
python setup.py bdist_egg,生成的.egg文件在dist/目录下,上传到S3后同样用--extra-py-files参数指定即可。
内容的提问来源于stack exchange,提问作者AKhanSJR
相关产品推荐
相关产品推荐

