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

hel*_*elm 1 apache-spark twitter-util

我使用的是最新的Spark主,另外,我加载这些罐子: - 火花流-twitter_2.10-1.1.0-SNAPSHOT.jar - twitter4j核-4.0.2.jar - twitter4j流-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()
Run Code Online (Sandbox Code Playgroud)

但是,我不会收到任何推文.我看到的主要错误是

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)
    ....
Run Code Online (Sandbox Code Playgroud)

然后为每次迭代:

INFO scheduler.ReceiverTracker: Stream 0 received 0 blocks
Run Code Online (Sandbox Code Playgroud)

我不确定问题出在哪里.如何验证我的Twitter凭据是否被正确识别?可能还有另一个罐子丢失了吗?

Sea*_*wen 6

NoSuchMethodError 应始终让您询问您是否使用与您编译的相同版本的库和类一起运行.

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

  • 是的,我会将其添加到编程指南文档中.添加到此JIRA for Spark 1.1版本https://issues.apache.org/jira/browse/SPARK-2419?filter=12327885 (2认同)