1

我正在使用最新的 Spark master,此外,我正在加载这些 jars: - spark-streaming-twitter_2.10-1.1.0-SNAPSHOT.jar - twitter4j-core-4.0.2.jar - twitter4j-stream-4.0.2 。罐

我在 shell 中执行的简单测试程序如下所示:

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 文件中添加了两个依赖文件之后,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 回答