【问题标题】:Spark Twitter Streaming火花推特流媒体
【发布时间】:2025-11-23 06:35:01
【问题描述】:

我是 Spark 和 Scala 的新手。我使用 Spark Streaming 编写了一个程序,用于在 Twitter 上获取主题标签或推文。我的代码是这样的:

  val conf = new SparkConf().setMaster("local[2]").setAppName("SparkTwitterHelloWorldExample");
    val jssc = new StreamingContext(conf, new Duration(1000));
    System.setProperty("twitter4j.oauth.consumerKey", consumerKey);
    System.setProperty("twitter4j.oauth.consumerSecret", consumerSecret);
    System.setProperty("twitter4j.oauth.accessToken", accessToken);
    System.setProperty("twitter4j.oauth.accessTokenSecret", accessTokenSecret);

  val twitterStream=TwitterUtils.createStream(jssc, None, Array("#Spark")) 

    // Without filter: Output text of all tweets
  val statuses = twitterStream.map{ status => status.getText() }
  val hashTags = statuses.filter(word => word.startsWith("#Spark"))
  val tagCounts = hashTags.window(Seconds(100), Seconds(10)).countByValue()
  hashTags.count().print();
  tagCounts.count().print();
  jssc.start();

这段代码总是打印0,不知为什么?有知道的可以帮忙看看吗,谢谢

【问题讨论】:

    标签: scala twitter apache-spark


    【解决方案1】:

    我认为现在,这段代码只会查找状态以#Spark 开头的推文。除此之外,我建议将文本小写,这样你就可以找到#Spark、#spark、#SPARK 等。你可以试试这个吗?

    val hashTags = statuses.filter(word => word.toLowerCase.contains("#Spark"))
    

    另一个选项是首先获取状态中的所有主题标签,然后从主题标签列表中继续。您可以在 spark 示例中找到相关示例:

    https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/streaming/TwitterPopularTags.scala
    

    【讨论】:

    • 感谢您的回答。现在,当我打印 hashTags 时,我得到的工作时间是 Time: 1450611281000 ms.. 你能告诉我如何获得状态吗?
    • 对于你给我的这个例子,我再次得到 0.. 我不知道是什么问题