1

私は最新の Spark マスターを使用しており、さらに、これらの jar をロードしています。 .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

問題がどこにあるのかわかりません。Twitter の資格情報が正しく認識されていることを確認するにはどうすればよいですか? 別の瓶が不足している可能性がありますか?

4

2 に答える 2

6

NoSuchMethodErrorコンパイルしたときと同じバージョンのライブラリとクラスで実行しているかどうかを常に確認する必要があります。

Spark サンプル モジュールの pom.xml ファイルを見ると、twitter4j 3.0.3 が使用されていることがわかります。実行時に互換性のない 4.0.2 を持ち込んでいて、それが壊れています。

于 2014-08-04T23:00:51.500 に答える
0

はい、私が pom.xml ファイルに 2 つの依存関係ファイルを追加した後、Sean Owen は正当な理由を示しました。

<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 ) に変更すると、非互換の問題が解決されます。

于 2015-04-22T09:15:53.590 に答える