You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark与Delta版本兼容问题咨询:Docker环境运行报错

解决PySpark与Delta版本冲突导致的AttributeError: module 'pyspark.sql.utils' has no attribute 'convert_exception'错误

问题根源

  1. Dockerfile环境变量配置无效:RUN export命令仅在当前shell会话生效,后续步骤和容器运行时无法获取这些变量,导致Delta的Maven依赖未正确加载。
  2. Delta版本冲突:同时通过pip安装了delta-spark==2.1.0,又在PYSPARK_SUBMIT_ARGS中指定了旧版本的delta-core_2.12:1.0.0,两个版本的Delta依赖冲突,破坏了PySpark的内部模块结构。
  3. 重复安装PySpark:jupyter/pyspark-notebook镜像本身已预装PySpark,手动通过pip再次安装可能引发版本不一致问题。

修正方案

1. 调整requirements.txt

保留必要依赖,移除与镜像预装组件冲突的包,确保Delta与PySpark版本匹配:

delta-spark==2.1.0
deltalake==0.10.1
jupyterlab==4.0.6
pandas==2.1.0
# 移除pyspark,使用镜像预装版本;若需指定版本,确保与镜像版本一致

2. 修正Dockerfile

  • 使用ENV设置全局环境变量,确保容器运行时能读取到Delta的Maven依赖
  • 统一Delta版本,使用与delta-spark==2.1.0对应的Maven坐标
  • 简化用户权限配置(原镜像已默认使用jovyan用户,无需重复配置)

修改后的Dockerfile:

FROM jupyter/pyspark-notebook

USER root
COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt && rm requirements.txt

# 设置Delta对应的Maven依赖和PySpark提交参数
ENV PACKAGES="io.delta:delta-core_2.12:2.1.0,io.delta:delta-storage_2.12:2.1.0"
ENV PYSPARK_SUBMIT_ARGS="--packages ${PACKAGES} pyspark-shell"

USER ${NB_USER}

3. 验证步骤

  1. 重新构建镜像:
docker-compose build
  1. 启动容器:
docker-compose up
  1. 在Notebook中测试Delta初始化代码:
from pyspark.sql import SparkSession
from delta.tables import DeltaTable

spark = SparkSession.builder \
    .appName("DeltaTest") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .getOrCreate()

# 创建测试Delta表
data = spark.range(0, 5)
data.write.format("delta").save("/tmp/delta-table")

# 读取Delta表
delta_table = DeltaTable.forPath(spark, "/tmp/delta-table")
delta_table.toDF().show()

关键说明

  • delta-spark的Maven依赖版本必须与pip包版本完全一致,否则会出现类加载冲突
  • jupyter/pyspark-notebook镜像的PySpark版本需与delta-spark兼容:delta-spark==2.1.0对应Spark 3.3.x,若镜像预装版本不符,可在requirements.txt中指定pyspark==3.3.3确保版本一致
  • 避免同时通过pip和Maven两种方式引入Delta依赖,选择一种即可(推荐使用delta-spark pip包配合对应Maven坐标)

内容的提问来源于stack exchange,提问作者Boris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:47:38