基于Docker运行简单PySpark脚本失败,寻求问题排查帮助
问题分析与解决方案
核心错误原因
- 权限问题:
apache/spark-py:v3.3.0官方镜像默认以非root的spark用户执行命令,apt-get update需要修改系统级目录,普通用户无权限操作,因此出现锁文件无法打开的报错。 - 冗余操作:该镜像已经预装了Python 3和对应版本的PySpark,完全不需要额外执行
apt-get install python3或pip3 install pyspark命令。
修正后的Dockerfile
FROM apache/spark-py:v3.3.0 COPY test.py /opt/spark/work-dir/test.py WORKDIR /opt/spark/work-dir CMD ["spark-submit", "test.py"]
关键调整说明
- 指定工作目录:将脚本放到Spark默认的工作目录
/opt/spark/work-dir,避免非root用户的文件权限问题。 - 使用
spark-submit执行:Spark脚本必须通过spark-submit提交,而非直接用python3运行,这能确保Spark环境正确初始化,加载必要的依赖与配置。 - 移除冗余安装步骤:删除所有
apt-get和pip相关命令,直接复用镜像自带的完整Spark-Python环境。
运行验证
执行原构建与运行命令即可:
docker build -t ch_image --rm . && docker run --rm --name ch_container ch_image
运行成功后,容器内的/opt/spark/work-dir/test目录会生成CSV文件(对应你代码中指定的输出路径)。如果需要将结果导出到宿主机,可添加目录挂载参数:
docker run --rm --name ch_container -v $(pwd)/output:/opt/spark/work-dir/test ch_image
宿主机当前目录下的output文件夹会自动同步生成的CSV文件。
补充说明
你之前尝试的/opt/spark/bin/pyspark是Spark的交互式Python Shell,并非用于提交批处理脚本的工具,提交作业请始终使用spark-submit。
内容的提问来源于stack exchange,提问作者AK91
相关产品推荐
相关产品推荐

