【发布时间】:2017-10-27 13:34:15
【问题描述】:
有没有办法用 Flink Streaming 计算时间窗口流中唯一词的数量?我看到this 的问题,但我不知道如何实现时间窗口。
【问题讨论】:
标签: apache-flink flink-streaming
有没有办法用 Flink Streaming 计算时间窗口流中唯一词的数量?我看到this 的问题,但我不知道如何实现时间窗口。
【问题讨论】:
标签: apache-flink flink-streaming
当然,这很简单。如果您想要在每个时间窗口内对所有输入记录进行聚合,那么您需要使用 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()
【讨论】: