如何使用flink计算时间窗口流中的唯一单词?

kzipqqlq  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(277)

有没有办法用flink流计算时间窗口流中的唯一单词数?我看到这个问题,但我不知道如何实现时间窗口。

dtcbnfnu

dtcbnfnu1#

当然,这很简单。如果您希望在每个时间窗口中对所有输入记录进行聚合,则需要使用windowall()的一种风格,这意味着您将不使用keyedstream,并且不能并行操作。
您需要决定是要滚动窗口还是滑动窗口,以及是在事件时间还是在处理时间内操作。
但粗略地说,你会这样做:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.addSource( ... )
    .timeWindowAll(Time.minutes(15))
    .apply(new UniqueWordCounter())
    .print()
env.execute()

uniquewordcounter将是一个windowfunction,它接收窗口中所有单词的iterable,并返回唯一单词的数量。
另一方面,如果您使用的是keyedstream,并且希望计算每个键的唯一单词数,请相应地修改应用程序:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.addSource( ... )
    .keyBy( ... )
    .timeWindow(Time.minutes(15))
    .apply(new UniqueWordCounter())
    .print()
env.execute()

相关问题