2016-08-19 2 views
2

cassandra-connector-assembly-2.0.0 von github Projekt gebaut.Was passiert - NoSuchMethodError: com.datastax.driver.core.ResultSet.fetchMoreResults

mit Scala 2.11.8, cassandra-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) 

Die gleiche Arbeit arbeitet zum Lesen weniger Feinmassendaten

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) 

Kann jemand vorschlagen oder auf das Problem hinweisen, und eine mögliche Lösung?

+0

Nun entfernte ich libraryDependencies + = "com.datastax.cassandra" % "Cassandra-Treiber-Core" % "3.1.2" aus dem Projekt und was auch immer gebaut -in Cassandra-Treiberkern, in den Spark eingebettet ist, funktioniert für den Rest meines Projekts als Cassandra-Treiber und löst das fetchMoreResults-Problem. Ich kann auch nicht finden, wo Spark dieses Cassandra Core Glas hat, es ist nicht im Jar/Verzeichnis. –

Antwort

2

Es ist ein Konflikt mit dem Cassandra Treiber-Core dass

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

in sich bringt.

Wenn Sie in die ~/.ivy2/cache/com.datastax.spark/Funken cassandra gehen -connector_2.11 Sie eine Datei mit dem Namen finden Efeu-2.0.0-M3.xml

In dieser Datei ist die Abhängigkeit wird

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

Beachten Sie, dass es die Version 3.0.2 des Cassandra-Treiberkerns ist, die von der neueren Version überrollt wird.

Es passiert einfach so, dass the latest source on Github does not show a implementation for fetchMoreResults, die von der Schnittstelle PagingIterable

vererbt Wenn Sie die Git-Version Rollback auf Github 3.0.x, werden Sie

public ListenableFuture<ResultSet> fetchMoreResults(); 

So sieht es aus wie das finden Die neuesten Cassandra-Kernfahrer wurden unvollständig aus der Tür gejagt. Oder ich könnte etwas verpassen. Hoffe das hilft.

tl; dr; Entfernen Sie den neuesten Treiber und verwenden Sie den in den Spark Cassandra-Anschluss eingebetteten Treiber.

+0

Vielen Dank für diese sehr informative Untersuchung. –

0

Das Problem wird durch das Entfernen cassandra-Treiber-Core-3.1.0-shaded.jar von Funken/Gläsern/gelöst

eine aktuelle Java dupliziert Klassen kollidierten Problem ?!

Sie müssen alle eingeschlossenen Gläser bestätigen, wenn es sich um vervielfältigte Gläser handelt.

Die oben erwähnte Lösung ist nur einer der Fälle.

+0

Haben Sie mehr Details über die Auflösung? Ich sehe Cassandra-Treiber-Core-3.1.0-shaded.jar nirgendwo. Spark-Cassandra-Connector_2.11-2.0.0-M3 enthält eine ResultSet-Klasse von Version 1 des Kerns, die offensichtlich den Fehler verursacht. – Adrian

2

hatte das gleiche Problem

gab es zwei Abhängigkeiten im Projekt, das sowohl cassandra-driver-core als Abhängigkeit

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

Funken cassandra-connecter eine andere Rückkehr zu erwarten ResultSet.fetchMoreResults hatte Typ, aufgrund seiner shading of guava

erwartet.shade.com.datastax.spark.connector.google.common.util.concurrent.ListenableFuture

gefunden. com.google.common.util.concurrent.ListenableFuture

geschaltet zu einem unshaded version of cassandra-connector das Problem zu beheben

+0

Beste Antwort! Lebensretter! – Dmitry1405