Spark使用Aerospike连接器写入数据时DataSourceRegister实例化错误
问题根因
你遇到的报错核心是Spark版本、Scala版本与Aerospike Spark连接器版本不兼容:
Aerospike 2.8.0版本连接器默认适配Spark 3.x版本,而你使用的是Spark 2.4.x系列。Spark 2.x和3.x的Logging类实现存在差异:Spark 2.x中Logging是trait,编译后会生成org.apache.spark.internal.Logging$class字节码;Spark 3.x中Logging改为interface,不存在该$class字节码,因此连接器初始化时找不到对应类抛出异常。
解决方案
- 第一步:替换适配Spark 2.4.x的Aerospike连接器版本,选择2.5.0版本的连接器即可,需匹配你使用的Scala 2.12版本,依赖坐标为
aerospike-spark-connector_2.12:2.5.0 - 第二步:统一Scala版本,你当前本地Spark对应Scala 2.12.8,客户端库使用2.12.11,虽然2.12大版本内小版本兼容,但建议统一为与运行环境一致的Scala版本,避免出现隐式转换或类加载冲突
- 第三步:排查依赖冲突,在IntelliJ中打开依赖树,确认没有混入Spark 3.x的相关依赖包,如果存在冲突可以通过exclusion规则排除不需要的传递依赖
- 第四步(非必须优化):代码中写入的format参数可简化为
aerospike,2.5.x版本连接器已注册该短名,无需写全类名com.aerospike.spark.sql
修改完依赖后重新编译运行即可正常写入数据。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

