有没有办法用Flink Streaming计算时间窗口流中的唯一单词数?我看到this问题,但我不知道如何实现时间窗口。
答案 0 :(得分:0)
当然,这非常简单。如果您希望在每个时间窗口中对所有输入记录进行聚合,那么您将需要使用windowAll()的一种风格,这意味着您将不使用keyedstream,并且您无法并行操作
您需要决定是否需要tumbling windows或sliding windows,以及是否在event time or processing time进行操作。
但粗略地说,你会做这样的事情:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.addSource( ... )
.timeWindowAll(Time.minutes(15))
.apply(new UniqueWordCounter())
.print()
env.execute()
您的UniqueWordCounter将是WindowFunction,它接收窗口中所有单词的可迭代内容,并返回唯一单词的数量。
另一方面,如果您使用的是keyedstream,并且想要为每个键计算唯一的单词,请相应地修改您的应用程序:
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.addSource( ... )
.keyBy( ... )
.timeWindow(Time.minutes(15))
.apply(new UniqueWordCounter())
.print()
env.execute()