Spark SQL: сбой потоковой передачи TwitterUtils по неизвестной причине

Я использую последнюю версию Spark Master и, кроме того, загружаю следующие файлы: - spark-streaming-twitter_2.10-1.1.0-SNAPSHOT.jar - twitter4j-core-4.0.2.jar - twitter4j-stream-4.0.2.jar

Моя простая тестовая программа, которую я выполняю в оболочке, выглядит следующим образом:

import org.apache.spark.streaming._
import org.apache.spark.streaming.twitter._
import org.apache.spark.streaming.StreamingContext._

System.setProperty("twitter4j.oauth.consumerKey", "jXgXF...")
System.setProperty("twitter4j.oauth.consumerSecret", "mWPvQRl1....")
System.setProperty("twitter4j.oauth.accessToken", "26176....")
System.setProperty("twitter4j.oauth.accessTokenSecret", "J8Fcosm4...")

var ssc = new StreamingContext(sc, Seconds(1))
var tweets = TwitterUtils.createStream(ssc, None)
var statuses = tweets.map(_.getText)
statuses.print()

ssc.start()

Однако я не буду получать твиты. Основная ошибка, которую я вижу, это

14/08/04 10:52:35 ERROR scheduler.ReceiverTracker: Deregistered receiver for stream 0: Error starting receiver 0 - java.lang.NoSuchMethodError: twitter4j.TwitterStream.addListener(Ltwitter4j/StatusListener;)V
    at org.apache.spark.streaming.twitter.TwitterReceiver.onStart(TwitterInputDStream.scala:72)
    ....

И затем для каждой итерации:

INFO scheduler.ReceiverTracker: Stream 0 received 0 blocks

Я не уверен, в чем проблема. Как я могу убедиться, что мои учетные данные в Твиттере правильно распознаны? Может быть, пропала еще одна банка?

2 ответа

Решение

NoSuchMethodError всегда должен вызывать у вас вопрос, работаете ли вы с теми же версиями библиотек и классов, которые вы скомпилировали.

Если вы посмотрите на файл pom.xml для модуля Spark examples, то увидите, что он использует twitter4j 3.0.3. Вы приносите несовместимую 4.0.2 с собой во время выполнения, и это ломает ее.

Да, Шон Оуэн дал вескую причину после того, как я добавил два файла зависимостей в файл pom.xml:

<dependency>
    <groupId>org.twitter4j</groupId>
    <artifactId>twitter4j-core</artifactId>
    <version>3.0.6</version>
</dependency>
<dependency>
    <groupId>org.twitter4j</groupId>
    <artifactId>twitter4j-stream</artifactId>
    <version>3.0.6</version>
</dependency>

Таким образом, мы изменим версию twitter4j по умолчанию с 4.0.x на 3.0.x ( http://mvnrepository.com/artifact/org.twitter4j/twitter4j-core), тогда несовместимая проблема будет решена.

Другие вопросы по тегам