2016-08-19 111 views
2

cassandra-connector-assembly-2.0.0github項目構建。發生了什麼 - NoSuchMethodError:com.datastax.driver.core.ResultSet.fetchMoreResults

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) 

任何一個可以建議或指出的問題,一個可能的解決方案正常工作?

+0

嗯,我刪除libraryDependencies + =「com.datastax.cassandra」%「卡桑德拉司機核」從項目和任何%「3.1.2」建-in cassandra驅動程序核心Spark已嵌入其中,作爲Cassandra驅動程序可用於我的其餘項目並解決fetchMoreResults問題。我也找不到Spark有這個Cassandra Core jar的地方,它不在jar /目錄中。 –

回答

2

它與卡桑德拉驅動程序內核,

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

帶來的衝突。

如果你去到〜/ .ivy2 /緩存/ com.datastax.spark /火花卡桑德拉-connector_2.11你會發現一個名爲常春藤2.0.0 M3.xml

在該文件的依賴文件

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

請注意,它是Cassandra驅動程序核心的3.0.2版本,它被最近的一個超出。

它碰巧的是,這是從界面PagingIterable

如果回滾Git版本到3.0.x的Github上繼承the latest source on Github does not show a implementation for fetchMoreResults,你會發現

public ListenableFuture<ResultSet> fetchMoreResults(); 

所以它看起來像最新的卡桑德拉核心車手衝出門外不完整。或者我可能會錯過一些東西。希望這可以幫助。

tl; dr;移除最新的驅動程序並使用spark cassandra連接器中嵌入的驅動程序。

+0

謝謝你這個非常豐富的調查。 –

0

問題是通過從火花/罐卡桑德拉驅動器芯-3.1.0-shaded.jar解析/

局部的java 複製類相沖突問題?

需要確認包含的所有罐子,如果有任何重複罐子參與。

上面提到的解決方案只是一種情況。

+0

你有關於分辨率的更多細節嗎?我沒有在任何地方看到cassandra-driver-core-3.1.0-shaded.jar。 spark-cassandra-connector_2.11-2.0.0-M3在內核的版本1中包含一個ResultSet類,這顯然會導致錯誤。 – Adrian

2

有同樣的問題

有項目其中兩個有cassandra-driver-core作爲一個依賴

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

火花卡桑德拉 - 連接器預計ResultSet.fetchMoreResults有不同的返回兩個依賴類型,由於其shading of guava

預計。shade.com.datastax.spark.connector.google.common.util.concurrent.ListenableFuture

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

切換到unshaded version of cassandra-connector糾正問題

+0

最佳答案!救命稻草! – Dmitry1405