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

Snappy Data POC构建报错:缺失Spark类org/apache/spark/sql/types/DataType

解决Snappy Data POC项目Spark版本依赖导致的NoClassDefFoundError问题

我看到你在构建Snappy Data POC项目时,执行gradlew generateAdImpressions命令遇到了java.lang.NoClassDefFoundError: org/apache/spark/sql/types/DataType错误,这个问题确实和Spark版本依赖不匹配以及依赖配置不当有关,下面是具体的分析和修复方案:

问题根源分析

你推测的方向完全正确:项目配置的Spark 2.1.1版本中,org.apache.spark.sql.types.DataType类的引用逻辑发生了变化,而项目代码仍在依赖旧的引用方式。另外从你的Gradle配置里还能发现两个关键问题:

  • 部分依赖使用了Scala 2.10版本(比如kafka-avro-codec_2.10、algebird-core_2.10),但项目核心依赖的是Scala 2.11,跨版本的Scala依赖会引发类加载冲突
  • Spark相关依赖使用了compileOnly作用域,这会导致运行时无法找到必要的类文件

具体修复步骤

1. 统一Scala版本依赖

把所有Scala 2.10的依赖替换为对应2.11版本的兼容包:

// 替换原有的kafka-avro-codec和algebird-core依赖
compile 'com.miguno:kafka-avro-codec_2.11:0.1.5'
compile 'com.twitter:algebird-core_2.11:0.13.0'

2. 调整Spark依赖的作用域

将Spark相关的compileOnly改为compile,确保运行时能加载到必要的类:

compile "io.snappydata:snappydata-core_2.11:${snappyVersion}"
compile "io.snappydata:snappydata-cluster_2.11:${snappyVersion}"
compile "io.snappydata:snappy-spark-core_2.11:${sparkVersion}"
compile "io.snappydata:snappy-spark-catalyst_2.11:${sparkVersion}"
compile "io.snappydata:snappy-spark-sql_2.11:${sparkVersion}"

3. 验证版本兼容性(可选)

如果调整后仍有问题,可以尝试将Spark版本降级到2.1.0,或者检查项目代码中对DataType的引用是否需要调整为Spark 2.1.1中的正确路径(比如替换为org.apache.spark.sql.api.java.DataType)。

4. 清理缓存并重新构建

执行以下命令清理Gradle缓存并重新执行构建任务:

./gradlew clean
./gradlew generateAdImpressions

额外排查建议

如果还是遇到依赖冲突,可以用Gradle的dependencyInsight任务定位问题:

./gradlew dependencyInsight --dependency org.apache.spark:spark-sql_2.11

这个命令会帮你快速找到哪个依赖引入了不兼容的Spark版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:15