如何在Docker容器中运行PySpark?附报错及Dockerfile求助
解决Docker容器中PySpark运行报错问题
你遇到的报错核心原因是仅通过pip安装pyspark不够——pip上的pyspark包只是Python API绑定,不包含Spark的核心二进制执行文件(比如load-spark-env.sh、spark-submit这些脚本),系统找不到Spark的安装目录,才会触发AttributeError和文件不存在的错误。
修改后的Dockerfile(完整解决方案)
FROM apache/airflow:2.9.0 USER root # 安装依赖:JDK、wget(用于下载Spark二进制包) RUN apt-get update \ && apt-get install -y --no-install-recommends \ openjdk-17-jre-headless \ wget \ && apt-get autoremove -yqq --purge \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 下载并安装Spark(版本需与PySpark对应,这里选3.5.1) ENV SPARK_VERSION=3.5.1 ENV HADOOP_VERSION=3 RUN wget -q https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz \ && tar -xzf spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz -C /opt/ \ && rm spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz \ && ln -s /opt/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION} /opt/spark # 配置Spark环境变量,让系统能找到执行脚本和Python模块 ENV SPARK_HOME=/opt/spark ENV PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin ENV PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.9.7-src.zip # 安装与Spark版本匹配的PySpark RUN pip install pyspark==${SPARK_VERSION} USER airflow RUN pip install apache-airflow-providers-amazon
关键步骤说明
- 新增
wget工具用于下载完整的Spark二进制发行包,必须保证Spark和PySpark版本一致,避免兼容性问题 - 将Spark解压到
/opt目录并创建软链接,简化后续版本切换操作 - 设置
SPARK_HOME、PATH、PYTHONPATH三个环境变量,解决脚本和模块找不到的问题 - 明确指定PySpark版本,避免pip自动安装不匹配的版本
验证方法
构建镜像后进入容器,执行pyspark命令,或运行Spark任务,即可确认报错是否解决。
内容的提问来源于stack exchange,提问作者PaulZouzou
相关产品推荐
相关产品推荐

