【问题标题】:Spark Streaming - Twitter - Filtering tweet dataSpark Streaming - Twitter - 过滤推文数据
【发布时间】:2015-09-12 18:05:54
【问题描述】:

我是 Scala 和 Spark 的新手。我正在使用 twitter 数据进行 spark 流式传输。我将流平面映射为单个单词。现在,我需要在处理之前从流数据中删除以#、@ 开头的推文单词和 RT 等单词。我知道这很容易做到。我为此编写了过滤器,但它不起作用。任何人都可以帮助解决这个问题。我的代码是

val sparkConf = new SparkConf().setMaster("local[2]")
    val ssc = new StreamingContext(sparkConf, Seconds(2))
    val stream = TwitterUtils.createStream(ssc, None)
    //val lanFilter = stream.filter(status => status.getLang == "en")
    val RDD1 = stream.flatMap(status => status.getText.split(" "))
    val filterRDD = RDD1.filter(word =>(word !=word.startsWith("#")))
    filterRDD.print()

语言过滤器也显示错误。

谢谢。

【问题讨论】:

  • 也许您可以向我们展示您编写的代码,以便我们更好地帮助您?
  • 我的代码是这样的 - val sparkConf = new SparkConf().setMaster("local[2]") val ssc = new StreamingContext(sparkConf, Seconds(2)) val stream = TwitterUtils.createStream (ssc, None) //val lanFilter = stream.filter(status => status.getLang == "en") val RDD1 = stream.flatMap(status => status.getText.split(" ")) val filterRDD = RDD1 .filter(word =>(word !=word.startsWith("#")))
  • 编辑您的问题并在其中添加代码。评论对降价的支持有限。
  • @SNR 请阅读this,这样我们才能真正为您提供帮助。

标签: scala twitter apache-spark twitter4j spark-streaming


【解决方案1】:

您可以使用内置的单词过滤器支持:

TwitterUtils.createStream(ssc, None, Array("filter", "these", "words")) 

但如果你想修复你的代码:

.filterNot(_.getText.startsWith("#"))

关于语言,请参阅question

【讨论】:

  • 谢谢.. 但是 TwitterUtils 中的过滤器处理一组过滤器字符串以仅获取与它们匹配的推文。我需要删除停用词,例如 - RT,is,has...etc..
  • 查看更新的答案,您可以使用filterNot 来实现。 :)
【解决方案2】:

您的 lambda 表达式是否正确?我想你想要:

val filterRDD = RDD1.filter(word => !word.startsWith("#"))

【讨论】:

    猜你喜欢
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2015-12-10
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多