使用kotlin-spark-api时无法访问org.apache.spark.sql.Dataset类求助
解决Kotlin Spark API中无法访问
org.apache.spark.sql.Dataset的问题 核心原因
错误提示的根源是Spark SQL依赖的配置方式错误:你使用compileOnly引入spark-sql,这个配置只会让依赖在编译阶段生效,运行时类路径中不会包含Spark SQL的类,而kotlin-spark-api运行时需要访问Dataset等Spark核心类。
解决方案
1. 修正Gradle依赖配置
将spark-sql的依赖从compileOnly改为implementation,确保编译和运行时都能访问到Spark SQL的类:
implementation("org.jetbrains.kotlinx.spark:kotlin-spark-api_3.3.2_2.13:1.2.4") implementation("org.apache.spark:spark-sql_2.13:3.3.2")
如果你是要打包Spark应用提交到集群(集群已预装Spark),可以将
spark-sql改为runtimeOnly以避免打包冗余依赖,但本地开发调试时必须用implementation。
2. 修正代码变量名错误
你的代码中存在一处变量名拼写错误:
val eventsDf = spark.createDataFrame(extractedEvents, EventDict::class.java) val sortedDf = extractedEventsDf.sort(col(EventColumns.DATETIME).asc()) // 此处使用了未定义的extractedEventsDf
需修正为:
val sortedDf = eventsDf.sort(col(EventColumns.DATETIME).asc())
3. 排查依赖冲突
如果修改后仍有问题,检查项目中是否存在其他版本的Spark依赖导致冲突。可以通过Gradle命令查看依赖树:
./gradlew dependencies
搜索spark-sql相关条目,确保所有Spark依赖的版本统一为3.3.2。
内容的提问来源于stack exchange,提问作者user3497321
相关产品推荐
相关产品推荐

