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

Sparklyr连接Cassandra查询数据时出现NoClassDefFoundError求助

问题描述
  • 本地运行Spark独立实例(版本3.2.1),使用sparklyr(1.8.1)可正常执行内存读写、表创建、Kafka流处理等操作
  • 本地Cassandra已搭建完成,测试表创建后可通过cqlsh正常连接操作
  • 通过sparklyr配置连接Cassandra后,能获取表元数据,但执行数据查询、加载到内存等操作时,抛出错误:
    java.lang.NoClassDefFoundError: org/apache/spark/sql/connector/read/partitioning/KeyGroupedPartitioning
    
  • 直接使用spark-shell搭配相同版本的Spark-Cassandra连接器(3.3.0)可正常查询数据

环境信息:

  • R 4.3.0,Linux Mint 21.1
  • R包:sparklyr_1.8.1,dplyr_1.1.2,DBI_1.1.3
  • Spark版本:3.2.1
  • Spark-Cassandra连接器版本:3.3.0
故障原因

错误中的KeyGroupedPartitioning类是Spark 3.3.0及以上版本才新增的API类,当前使用的Spark 3.2.1并不包含该类。Spark-Cassandra连接器3.3.0基于Spark 3.3+开发,因此在Spark 3.2.1环境中调用连接器的查询逻辑时,会因找不到该类抛出错误。

至于spark-shell能正常运行的原因,大概率是spark-shell实际使用的Spark版本为3.3+(可能与本地配置的Spark版本不一致),或者在spark-shell中误使用了适配Spark3.2.x的连接器版本。

解决办法

方案1:降级Spark-Cassandra连接器版本

将连接器更换为适配Spark3.2.x的版本(如3.2.0),该版本不会依赖Spark3.3+的新增类。在sparklyr连接时指定该版本的jar包:

sc <- spark_connect(
  master = "local[*]",
  version = "3.2.1",
  packages = "com.datastax.spark:spark-cassandra-connector_2.12:3.2.0"
)

方案2:升级Spark版本

将本地Spark版本升级到3.3.0及以上,与当前使用的Spark-Cassandra连接器3.3.0版本匹配,确保API类存在。

方案3:检查spark-shell的实际配置

确认spark-shell使用的Spark版本和连接器版本是否与sparklyr一致,排查版本混淆情况,避免后续配置出现偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:31