每隔10秒输出过去60秒产生的前十热点词

每隔10秒输出过去60秒产生的前十热点词

Content #

如果数据流中的每个词语都有一个时间戳代表词语产生的时间,那么要怎样实现,每隔 10 秒钟输出过去 60 秒内产生的前十热点词呢?

#这个DataFrame代表词语的数据流,schema是 { timestamp: Timestamp, word: String}
words = ...

windowedCounts = words.groupBy(
   window(words.timestamp, "1 minute", "10 seconds"),
   words.word
).count()
.sort(desc("count"))
.limit(10)

基于词语的生成时间,我们创建了一个窗口长度为 1 分钟,滑动间隔为 10 秒的 window。然后,把输入的词语表根据 window 和词语本身聚合起来,并统计每个 window 内每个词语的数量。之后,再根据词语的数量进行排序,只返回前 10 的词语。

Viewpoints #

From #

17 | Structured Streaming:如何用DataFrame API进行实时数据分析?