无法从源码构建Spark-Cassandra Connector及导入类报错求助
解决Spark-Cassandra Connector导入失败的问题
嘿,我帮你梳理下这个问题——你遇到的object datastax is not a member of package com错误,核心原因是版本不兼容和编译时参数配置不对,咱们一步步来搞定:
一、先搞清楚版本对应关系
你的环境是Spark 2.3.0 + Cassandra 3.11.2,这俩搭配的Spark Cassandra Connector得是2.3.x系列(比如2.3.2),这个版本专门适配Spark 2.x,同时兼容Cassandra 3.11.x。
但你现在编译出来的是1.2.0-SNAPSHOT版本,这个老版本只支持Spark 1.x,完全和你的Spark 2.3.0不搭,这是最主要的问题。另外,Spark 2.3.0默认用的是Scala 2.11,你编译出来的jar却是Scala 2.10的,这也会导致类加载失败。
二、正确编译对应版本的Connector
1. 切换到适配Spark 2.3的分支
先把源码切到对应版本的分支,别用默认的旧分支:
git clone https://github.com/datastax/spark-cassandra-connector.git cd spark-cassandra-connector # 切换到适配Spark 2.3的v2.3.2分支 git checkout v2.3.2
2. 指定Scala和Spark版本编译
用sbt编译时,必须明确指定和你Spark匹配的Scala版本(Spark 2.3.0对应Scala 2.11.8),还有Spark版本:
sbt/sbt -Dscala.version=2.11.8 -Dspark.version=2.3.0 assembly
这里的参数很关键,确保编译出来的jar和你的Spark环境完全兼容。
3. 找到正确的编译产物
编译完成后,正确的jar文件在这个路径:
./spark-cassandra-connector/target/scala-2.11/spark-cassandra-connector-assembly-2.3.2.jar
三、启动Spark Shell并加载正确的Connector
用刚才编译好的jar启动Spark Shell:
$SPARK_HOME/bin/spark-shell --jars ./spark-cassandra-connector/target/scala-2.11/spark-cassandra-connector-assembly-2.3.2.jar
四、验证导入是否成功
在Spark Shell里执行以下命令:
sc.stop() import com.datastax.spark.connector._
如果没有报错,就说明导入成功啦!
偷懒小技巧:直接用预编译包
要是不想折腾源码编译,你也可以直接下载对应版本的预编译jar包,放到Spark的jars目录下,或者启动时用--jars指定,省事儿多了。
内容的提问来源于stack exchange,提问作者Massimiliano
相关产品推荐
相关产品推荐

