我在做什么:


尝试连接Spark和Cassandra以从Spark检索存储在cassandra表中的数据。


我遵循了哪些步骤:


下载cassandra 2.1.12和spark 1.4.1。
sudo build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean packagsbt/sbt clean assembly构建火花
将一些数据存储到cassandra中。
将这些罐子下载到spark/lib中:


cassandra-driver-core2.1.1.jar spark-cassandra-connector_2.11-1.4.1.jar

将jar文件路径添加到conf/spark-defaults.conf,例如

spark.driver.extraClassPath \
                            ~/path/to/spark-cassandra-connector_2.11-1.4.1.jar:\
                            ~/path/to/cassandra-driver-core-2.1.1.jar


我如何运行外壳程序:

在运行./bin/cassandra之后,我运行spark类似-

sudo ./bin/pyspark

并且还尝试了sudo ./bin/spark-shell

我在问什么

sqlContext.read.format("org.apache.spark.sql.cassandra")\
               .options(table="users", keyspace="test")\
               .load()\
               .show()


问题:

 java.lang.NoSuchMethodError:\
                    scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;


但是org.apache.spark.sql.cassandra存在于我下载的spark-cassandra-connecter.jar中。

这是完整的Log Trace

我尝试了什么:


我尝试通过添加2个jar,使用选项--packages--driver-class-path--jars运行。
尝试将scala降级到2.1,并尝试使用scala shell,但仍然存在相同的错误。


我一直在思考的问题-


我使用的cassandra,spark和scala版本是否彼此兼容?
我使用的jar文件版本正确吗?
我是否以错误的方式编译spark?
我是否缺少某些东西或做错了什么?


我真的是火花和卡桑德拉的新手,所以我真的需要一些建议!花费了数小时的时间,这可能是微不足道的。

最佳答案

一些注意事项

您正在为2.10构建Spark,并为2.11使用Spark Cassandra Connector库。要为2.11构建Spark,您需要使用-Dscala-2.11标志。这很可能是导致错误的主要原因。

仅在您的项目中实际包括连接器的情况下,仅包含没有依赖项的核心库是不够的。如果您超过了第一个错误,则很可能会看到其他类未从缺少的部门找到错误。

这就是为什么建议使用Spark Packages网站和--packages标志的原因。这将包括一个具有所有必需依赖项的“ fat-jar”。看到
http://spark-packages.org/package/datastax/spark-cassandra-connector

对于Spark 1.4.1和pyspark这将是

//Scala 2.10
$SPARK_HOME/bin/pyspark --packages datastax:spark-cassandra-connector:1.4.1-s_2.10
//Scala 2.11
$SPARK_HOME/bin/pyspark --packages datastax:spark-cassandra-connector:1.4.1-s_2.11


您永远不必使用--packages方法手动下载jar。

不要使用spark.driver.extraClassPath,它只会将依赖项添加到驱动程序中,远程代码将无法使用这些依赖项。

10-08 07:41
查看更多