有没有办法用flink流计算时间窗口流中的唯一单词数?我看到这个问题,但我不知道如何实现时间窗口。
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()
1条答案
按热度按时间dtcbnfnu1#
当然,这很简单。如果您希望在每个时间窗口中对所有输入记录进行聚合,则需要使用windowall()的一种风格,这意味着您将不使用keyedstream,并且不能并行操作。
您需要决定是要滚动窗口还是滑动窗口,以及是在事件时间还是在处理时间内操作。
但粗略地说,你会这样做:
uniquewordcounter将是一个windowfunction,它接收窗口中所有单词的iterable,并返回唯一单词的数量。
另一方面,如果您使用的是keyedstream,并且希望计算每个键的唯一单词数,请相应地修改应用程序: