会发生什么 - NoSuchMethodError:com.datastax.driver.core.ResultSet.fetchMoreResults

时间:2016-08-19 08:33:02

标签: apache-spark spark-cassandra-connector

cassandra-connector-assembly-2.0.0来自github项目。

Scala 2.11.8cassandra-driver-core-3.1.0

sc.cassandraTable("mykeyspace", "mytable").select("something").where("key=?", key).mapPartitions(par => {
    par.map({ row => (row.getString("something"), 1 ) })
})
.reduceByKey(_ + _).collect().foreach(println)

同样的工作可以很好地阅读较少的海量数据

java.lang.NoSuchMethodError: com.datastax.driver.core.ResultSet.fetchMoreResults()Lshade/com/datastax/spark/connector/google/common/util/concurrent/ListenableFuture;
    at com.datastax.spark.connector.rdd.reader.PrefetchingResultSetIterator.maybePrefetch(PrefetchingResultSetIterator.scala:26)
    at com.datastax.spark.connector.rdd.reader.PrefetchingResultSetIterator.next(PrefetchingResultSetIterator.scala:39)
    at com.datastax.spark.connector.rdd.reader.PrefetchingResultSetIterator.next(PrefetchingResultSetIterator.scala:17)
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
    at scala.collection.Iterator$$anon$12.next(Iterator.scala:444)
    at com.datastax.spark.connector.util.CountingIterator.next(CountingIterator.scala:16)
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
    at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala:194)
    at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:63)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:79)
    at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:47)
    at org.apache.spark.scheduler.Task.run(Task.scala:85)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

任何人都可以建议或指出问题,以及可能的解决方案吗?

4 个答案:

答案 0 :(得分:3)

有同样的问题

项目中有两个依赖项,它们都有cassandra-driver-core作为依赖项

spark-cassandra-connector_2.11-2.0.0-M3& job-server-api_2.10-0.8.0-SNAPSHOT

spark-cassandra-connecter由于其shading of guava

而期望ResultSet.fetchMoreResults具有不同的返回类型

预计。 shade.com.datastax.spark.connector.google.common.util.concurrent.ListenableFuture

找到了。 com.google.common.util.concurrent.ListenableFuture

切换为unshaded version of cassandra-connector以更正问题

答案 1 :(得分:2)

这是与Cassandra驱动程序核心的冲突

libraryDependencies += "com.datastax.spark" % "spark-cassandra-connector_2.11" % "2.0.0-M3"

带来。

如果你进入〜/ .ivy2 / cache / com.datastax.spark / spark-cassandra-connector_2.11,你会发现一个名为ivy-2.0.0-M3.xml的文件

在该文件中依赖是

com.datastax.cassandra" name="cassandra-driver-core" rev="3.0.2" force="true" 

请注意,它是Cassandra驱动程序核心的3.0.2版本,它会被最近的版本覆盖。

恰好发生了从{PageIterable接口

继承的the latest source on Github does not show a implementation for fetchMoreResults

如果你在Github上将Git版本回滚到3.0.x,你就会找到

 public ListenableFuture<ResultSet> fetchMoreResults();

所以看起来最新的Cassandra核心车手冲出门不完整。或者我可能会遗漏一些东西。希望这会有所帮助。

TL;博士;删除最新的驱动程序并使用spark cassandra连接器中嵌入的驱动程序。

答案 2 :(得分:0)

通过从spark / jars /

中删除 cassandra-driver-core-3.1.0-shaded.jar 来解决问题

主题java 重复类冲突问题?!

需要确认所有包含的罐子,如果有任何重复的罐子。

上面提到的解决方案只是个案之一。

答案 3 :(得分:0)

对于所有这些问题,请在命令下运行,并检查是否存在重叠的依赖项-

MVN依赖项:树