What happens - NoSuchMethodError: com.datastax.driver.core.ResultSet.fetchMoreResults

What happens - NoSuchMethodError: com.datastax.driver.core.ResultSet.fetchMoreResults

cassandra-connector-assembly-2.0.0github 项目构建。

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.next(Iterator.scala:409)
    at scala.collection.Iterator$$anon.next(Iterator.scala:409)
    at scala.collection.Iterator$$anon.next(Iterator.scala:444)
    at com.datastax.spark.connector.util.CountingIterator.next(CountingIterator.scala:16)
    at scala.collection.Iterator$$anon.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)

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

问题已通过从 spark/jars/

中删除 cassandra-driver-core-3.1.0-shaded.jar 得到解决

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

如果涉及任何重复的 jar,需要确认是否包含所有 jar。

上述解决方案只是其中一种情况

与 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" 

请注意,它是 3.0.2 版的 Cassandra 驱动程序核心,它被更新的驱动程序核心超越。

恰好the latest source on Github does not show a implementation for fetchMoreResults继承自接口PagingIterable

如果您在 Github 上将 Git 版本回滚到 3.0.x,您会发现

 public ListenableFuture<ResultSet> fetchMoreResults();

所以看起来最新的 Cassandra 核心驱动程序是不完整的。或者我可能会遗漏一些东西。希望这有帮助。

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

有同样的问题

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

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

spark-cassandra-connecter 预期 ResultSet.fetchMoreResults 具有不同的 return 类型,因为其 shading of guava

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

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

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

对于所有这些问题 运行 下面的命令并检查是否存在任何重叠的依赖关系 -

mvn dependency:tree