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

时间:2017-10-26 14:11:37

标签: apache-flink flink-streaming

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

1 个答案:

答案 0 :(得分:0)

当然,这非常简单。如果您希望在每个时间窗口中对所有输入记录进行聚合,那么您将需要使用windowAll()的一种风格,这意味着您将不使用keyedstream,并且您无法并行操作

您需要决定是否需要tumbling windowssliding 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()