Spark3.2升级后出现ServiceConfigurationError Jupyter中读取parquet失败
问题根因分析
- Scala版本不兼容:你配置的spark-excel依赖后缀是
_2.11,对应Scala 2.11版本,但Spark 3.2默认使用Scala 2.12,Scala大版本不兼容会直接触发类加载异常。 - Delta Lake版本不兼容:报错里的
org.apache.spark.internal.Logging$class缺失是典型的Spark 2.x开发的Delta包运行在Spark 3.x上的问题:Spark 2.x中Logging是trait,Spark 3.x重构为抽象类,低版本Delta完全不兼容Spark 3.2。Spark初始化数据源查找逻辑时会扫描classpath下所有实现了DataSourceRegister的类,哪怕你没有主动使用Delta Lake,只要存在不兼容的Delta包就会触发报错。Jupyter环境的classpath中存在适配Spark 2.x的Delta Lake jar包,而控制台环境无该冲突,所以仅在Jupyter侧复现问题。 - 依赖版本不匹配:你指定的hadoop-azure 3.2.0需要和Spark 3.2内置的Hadoop版本对应,若内置Hadoop版本不是3.2.x也会触发依赖冲突。
修复步骤
1. 修正Spark Session依赖配置
把spark.jars.packages配置替换为适配Spark 3.2 + Scala 2.12的版本:
spark = ( SparkSession.builder # 替换为适配Scala 2.12、Spark 3.2的依赖版本 .config('spark.jars.packages', 'org.apache.hadoop:hadoop-azure:3.3.1,com.crealytics:spark-excel_2.12:3.2.1_0.18.7,io.delta:delta-core_2.12:2.1.1') .config('spark.sql.extensions', 'io.delta.sql.DeltaSparkSessionExtension') .config('spark.sql.catalog.spark_catalog', 'org.apache.spark.sql.delta.catalog.DeltaCatalog') .config('spark.hadoop.fs.azure', "org.apache.hadoop.fs.azure.NativeAzureFileSystem") .config("spark.hadoop.fs.azure.account.key." + storage_account + ".blob.core.windows.net", storage_account_key) .config("spark.driver.memory", "32G") .master("local[*]") .appName("Dev") .getOrCreate() ) spark.sparkContext._jsc.hadoopConfiguration().set("fs.wasbs.impl", "org.apache.hadoop.fs.azure.NativeAzureFileSystem")
2. 清理Jupyter kernel的冲突依赖
- 清理Jupyter kernel运行环境中
SPARK_CLASSPATH、PYSPARK_SUBMIT_ARGS等环境变量里残留的Spark 2.x相关jar包、旧版本Delta和excel依赖。 - 执行
pip uninstall delta-spark pyspark再重新安装适配版本:pip install pyspark==3.2.4 delta-spark==2.1.1,保证Python侧的PySpark和Delta版本和jar包版本匹配。
3. 校验环境一致性
在Jupyter中执行以下代码确认运行环境和控制台一致,排查额外加载的冲突依赖:
import sys print(sys.path) print(spark.sparkContext.getConf().get("spark.jars"))
内容的提问来源于stack exchange,提问作者DatGuy
相关产品推荐
相关产品推荐

