【问题标题】:Operation on a sliding window over streaming in Scala using reduceByKeyAndWindow()在 Scala 中使用 reduceByKeyAndWindow() 对流式滑动窗口进行操作
【发布时间】:2016-01-02 14:33:50
【问题描述】:

我正在使用 Scala 编写一个 Spark 流应用程序,我的目标是每秒读取一次 Twitter 提要,以计算在 60 秒的窗口内转发次数最多的状态。

我在概念上想要的是在滑动窗口结束时获取状态的转发次数,并在其开始时从等效数字中减去它,以便找到编号。窗口内的转推。相关的代码行是:

val counts = tweets.filter(_.isRetweet).map { status => 
               (status.getText(), status.getRetweetedStatus().getRetweetCount()) 
             }.reduceByKeyAndWindow(*function*, Seconds(60), Seconds(1))

所以,我的问题是我应该在这里使用什么函数来达到预期的结果,即获取getRetweetCount() 在窗口内返回的最大值并从中减去最小值。

【问题讨论】:

    标签: scala twitter twitter4j spark-streaming


    【解决方案1】:

    如果我错了或在这里做出了错误的假设,请纠正我,但您实际上是在检查 Seconds(60) 窗口中状态的转发次数。为此,您已经有了过滤器,可以删除所有未转发的推文 (filter(_.isRetweet))。现在,您需要做的就是汇总转发状态以确定它们的频率。

    这可以通过以下方式实现:

    val counts = tweets.filter(_.isRetweet).map { status => 
                   (status.getText(), null) 
                 }.countByValueAndWindow(Seconds(60), Seconds(1))
    

    也许在此之后,您可以按价值排序并在该窗口内收集转发次数最多的推文。

    【讨论】:

    • 这也是我的第一个想法,但后来我意识到,我正在阅读的公共 Twitter 流只给了我很小一部分的全球流量,所以我错过了很多推文。这就是为什么我使用 getRetweetCount() 来查看中间是否有错过的转推。所以我想要的是获取窗口内转发计数的最大值并从中减去最小值,以确保我捕获了所有内容。
    猜你喜欢
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多