2016-08-19 2 views
2

cassandra-connector-assembly-2.0.0 от github проект.Что происходит - NoSuchMethodError: com.datastax.driver.core.ResultSet.fetchMoreResults

с 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) 

Та же работа отлично работает для чтения менее массовых данных

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" % "Cassandra-водитель-ядро" % "3.1.2" из проекта и все, построенные Внутри ядра драйвера cassandra Spark встроен в него, и остальная часть моего проекта работает как драйвер Cassandra и решает проблему fetchMoreResults. Также я не могу найти, где Spark имеет эту банку Cassandra Core, она не находится в каталоге jars /. –

ответ

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" 

Обратите внимание, что это 3.0.2-версия ядра ядра Cassandra, которая переполняется более поздним.

Просто так получилось, что the latest source on Github does not show a implementation for fetchMoreResults, который наследуется от интерфейса PagingIterable

Если вы откатить версию Git для 3.0.x на Github, вы найдете

public ListenableFuture<ResultSet> fetchMoreResults(); 

Так выглядит новейшие основные драйверы Cassandra были выведены из двери неполной. Или я могу что-то упустить. Надеюсь это поможет.

tl; dr; Удалите последний драйвер и используйте тот, который встроен в разъем искровой кассандры.

+0

Благодарим вас за это очень информативное исследование. –

0

Проблема решена путем удаления Cassandra-водитель-ядро-3.1.0-shaded.jar от искровых/банок/

актуальной Java дублированные классы противоречили проблему ?!

Необходимо подтвердить все включенные банки, если есть какие-либо дублированные банки.

Решение, упомянутое выше, является только одним случаем.

+0

У вас есть более подробная информация о резолюции? Я не вижу cassandra-driver-core-3.1.0-shaded.jar где угодно. spark-cassandra-connector_2.11-2.0.0-M3 включает класс ResultSet из версии 1 ядра, что, очевидно, вызывает ошибку. – 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