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

Spark Java写入CSV时遇NoClassDefFoundError(Dataset)问题求助

问题分析与解决

核心原因

  • Spark SQL依赖仅编译时可用:你的build.gradle中spark-sql使用compileOnly配置,该依赖仅在编译阶段生效,运行时不会被加入类路径,导致JVM找不到Dataset类。
  • 依赖版本与实际Spark版本不匹配:本地安装的Spark是3.4.0,但Gradle依赖的是3.2.0,版本不一致会引发类加载异常。
  • Scala版本兼容性问题:本地Scala为3.3.0,但Spark 3.4.0基于Scala 2.12.x,Scala 3.x与2.x二进制不兼容,需保证依赖的Scala版本与Spark一致。

修复步骤

1. 修正Gradle依赖配置

修改build.gradle中的依赖部分,将spark-sql的compileOnly改为implementation,并统一版本为3.4.0:

dependencies {
    implementation 'org.apache.spark:spark-sql_2.12:3.4.0'
    implementation 'org.apache.spark:spark-core_2.12:3.4.0'

    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}

2. 统一Scala版本

将本地Scala版本切换为2.12.17(与Spark自带的Scala版本一致),避免版本不兼容导致的类加载问题。

3. 规范运行Spark应用

Spark应用更推荐通过spark-submit提交运行:

  1. 用gradle shadowJar打包成包含所有依赖的fat jar
  2. 执行以下命令提交:
spark-submit --class org.example.Main build/libs/your-jar-name.jar

若需用Gradle直接运行,需添加application插件并配置主类:

plugins {
    id 'java'
    id 'application'
}

mainClass = 'org.example.Main'

验证修复

执行gradle clean build重新构建项目,再运行应用,即可正常生成CSV文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:59:56