使用reduceByKeyAndWindow()在Scala中通过流式传输在滑动窗口上操作

时间:2015-10-05 20:07:24

标签: scala twitter twitter4j spark-streaming

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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