Spark SQL:TwitterUtils Streaming由于未知原因而失败

时间:2014-08-04 22:09:24

标签: apache-spark twitter-util

我正在使用最新的Spark大师,另外,我正在加载这些罐子:   - spark-streaming-twitter_2.10-1.1.0-SNAPSHOT.jar   - twitter4j-core-4.0.2.jar   - twitter4j-stream-4.0.2.jar

我在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凭据是否被正确识别? 可能还有另一个罐子丢失吗?

2 个答案:

答案 0 :(得分:6)

NoSuchMethodError应始终让您询问您是否使用与您编译的库相同的库和类运行。

如果查看Spark示例模块的pom.xml文件,您会看到它使用twitter4j 3.0.3。你在运行时带来了不兼容的4.0.2并打破了它。

答案 1 :(得分: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),然后将解决不兼容的问题。

相关问题