此问题类似于:
What happens - NoSuchMethodError: com.datastax.driver.core.ResultSet.fetchMoreResults
每当我尝试查询cassandra表时,它总是给我以下错误:
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) ~[spark-cassandra-connector_2.11-2.0.8.jar!/:2.0.8]
at com.datastax.spark.connector.rdd.reader.PrefetchingResultSetIterator.next(PrefetchingResultSetIterator.scala:39) ~[spark-cassandra-connector_2.11-2.0.8.jar!/:2.0.8]
at com.datastax.spark.connector.rdd.reader.PrefetchingResultSetIterator.next(PrefetchingResultSetIterator.scala:17) ~[spark-cassandra-connector_2.11-2.0.8.jar!/:2.0.8]
由于ResultSet类同时存在于cassandra-driver-core和spark-cassandra-connector中。
以前的帖子建议删除cassandra-driver-core jar,因为它与spark-cassandra-connector嵌入式驱动程序冲突。
这是我到目前为止尝试过的解决方案:
<dependency>
<groupId>com.datastax.spark</groupId>
<artifactId>spark-cassandra-connector_2.11</artifactId>
<version>2.0.8</version>
<exclusions>
<exclusion>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
</exclusion>
</exclusions>
</dependency>
但是它们都不起作用,每次我重建代码时,cassandra-driver-core jar会重新出现并给出相同的错误。
我也尝试过从项目jar中手动删除它,但是该项目无法连接到cassandra DB。
此依赖关系冲突是否有解决方案?
我们非常感谢您的帮助。预先感谢!
答案 0 :(得分:0)
找到了解决方案。我删除了spark-cassandra-connector,并使用了spark-cassandra-connector-unshaded依赖项。 使用无阴影依赖的原因是,因为以前REST API是从Guava读取Resultset类的,而该类不包含fetchMoreResult方法。 使用非阴影版本,以某种方式消除该冲突,并调用cassandra-driver-core jar。
此外,在添加无阴影的依赖项时,由于STS无法下载所需的jar,因此它给出了“工件丢失错误”。因此必须下载jar并将其手动放置在未着色的文件夹中。