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

使用Scala Spark创建Delta表时出现ClassCastException异常

问题解决:Scala Spark创建Delta表时的ClassCastException异常

异常详情

创建Delta表时仓库已生成_delta_log目录,但执行插入操作时触发以下异常:

Exception in thread "main" java.lang.ClassCastException: class org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus cannot be cast to class org.apache.spark.sql.execution.datasources.FileStatusWithMetadata (org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus and org.apache.spark.sql.execution.datasources.FileStatusWithMetadata are in unnamed module of loader 'app')

问题分析

  1. JDK版本兼容性:Spark 3.5.0官方仅支持JDK 8和JDK 11,你使用的JDK 20不在支持范围内,会导致Hadoop文件系统相关类的加载异常。
  2. Scala版本不匹配:Spark 3.5.0推荐使用Scala 2.12.17或2.13.10,当前使用的Scala 2.12.4版本过旧,存在类兼容性问题。
  3. 潜在依赖冲突:未显式指定Hadoop依赖版本,可能导致与Spark自带的Hadoop组件版本不兼容。

解决方案

1. 调整JDK版本

将JDK切换为JDK 11(推荐)或JDK 8,确保符合Spark 3.5.0的官方支持要求。

2. 更新build.sbt配置

修改Scala版本,并添加兼容的Hadoop依赖,调整后的配置如下:

// 使用JDK 11或JDK 8
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / scalaVersion := "2.12.17" // Spark 3.5.0推荐的Scala 2.12版本

lazy val root = (project in file("."))
  .settings(
    name := "scala-spark-app2",
    idePackagePrefix := Some("com.scalaspark.app2"),
  )

// Spark依赖
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.5.0" % Provided
libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.5.0" % Provided
// Delta Lake依赖,与Spark 3.5.0兼容
libraryDependencies += "io.delta" %% "delta-core" % "2.4.0"
// 添加兼容的Hadoop依赖
libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "3.3.4" % Provided

注:添加Provided标记是因为Spark集群环境通常自带这些依赖,本地运行时可根据情况移除。

3. 清理旧数据目录

删除已生成的/Users/usr1/scala-spark-app2/data_files/T1目录,避免残留的旧_delta_log导致异常。

4. 验证代码

保持Main.scala代码不变,重新运行程序,确认异常是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:49