新手求助:如何通过AWS EMR Serverless控制台提交多文件PySpark作业
解决EMR Serverless提交多文件PySpark项目的步骤
1. 打包项目依赖文件
将PySpark项目中所有依赖的.py文件(包含目录结构)打包成zip格式。比如你有main.py主文件,以及utils/helper.py、common/config.py这类依赖文件,直接把整个项目目录(除虚拟环境、无关文件外)打包为spark-project-deps.zip,确保解压后能保留原有的目录层级,这样主文件才能正确导入模块。
2. 上传文件到S3
将主文件(如main.py)和打包好的依赖包(spark-project-deps.zip)上传到同一个S3存储桶的指定路径,例如:
- 主文件路径:
s3://your-bucket/emr-jobs/main.py - 依赖包路径:
s3://your-bucket/emr-jobs/deps/spark-project-deps.zip
3. 控制台提交作业配置
在EMR Serverless控制台提交作业时,按以下配置:
- 主Python文件:填写主文件的S3路径(
s3://your-bucket/emr-jobs/main.py) - 依赖项:点击「添加依赖」,选择「上传的文件」,填入依赖包的S3路径(
s3://your-bucket/emr-jobs/deps/spark-project-deps.zip)。EMR Serverless会自动解压该包到作业运行环境,保证主文件能导入依赖模块。
4. 可选:用AWS CLI提交(更灵活)
如果习惯用命令行,可执行以下命令提交作业,通过--py-files指定依赖包:
aws emr-serverless start-job-run \ --application-id <你的EMR Serverless应用ID> \ --execution-role-arn <你的执行角色ARN> \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://your-bucket/emr-jobs/main.py", "entryPointArguments": [], "sparkSubmitParameters": "--py-files s3://your-bucket/emr-jobs/deps/spark-project-deps.zip" } }'
注意事项
- 确保EMR Serverless执行角色拥有对应S3路径的
s3:GetObject权限 - 若项目依赖第三方库(如
pandas、requests),需将这些库打包成wheel包加入依赖zip,或在sparkSubmitParameters中用--packages指定Maven坐标安装 - 打包时避免包含虚拟环境、日志等无关文件,减少包体积
内容的提问来源于stack exchange,提问作者Corey A
相关产品推荐
相关产品推荐

