java.lang.NoSuchMethodError:com.datastax.driver.core.ResultSet.fetchMoreResults()

时间:2018-06-29 18:13:25

标签: maven apache-spark cassandra dependencies spark-cassandra-connector

此问题类似于:

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嵌入式驱动程序冲突。

这是我到目前为止尝试过的解决方案:

  1. 从pom删除cassandra-driver-core依赖项
  2. 使用
  3. 从spark-cassandra-connector依赖项中排除cassandra-driver-core
<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。

此依赖关系冲突是否有解决方案?

我们非常感谢您的帮助。预先感谢!

1 个答案:

答案 0 :(得分:0)

找到了解决方案。我删除了spark-cassandra-connector,并使用了spark-cassandra-connector-unshaded依赖项。 使用无阴影依赖的原因是,因为以前REST API是从Guava读取Resultset类的,而该类不包含fetchMoreResult方法。 使用非阴影版本,以某种方式消除该冲突,并调用cassandra-driver-core jar。

此外,在添加无阴影的依赖项时,由于STS无法下载所需的jar,因此它给出了“工件丢失错误”。因此必须下载jar并将其手动放置在未着色的文件夹中。