【问题标题】:How to count unique words in time window stream with Flink?如何使用 Flink 计算时间窗口流中的唯一词?
【发布时间】:2017-10-27 13:34:15
【问题描述】:

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

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    当然,这很简单。如果您想要在每个时间窗口内对所有输入记录进行聚合,那么您需要使用 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()
    

    【讨论】:

    • 但问题是:对于每个键我需要知道唯一值,所以我需要使用“keyBy”
    • Apply 太笼统了,没有 apply 就没有办法吗?
    • 或者如果您可以共享一个代码示例,例如“sum”函数但具有“apply”函数?
    • 在IntelliJ中运行flink并做一些实验很容易。这是弄清楚这些不同功能如何工作的一种非常有效的方法。您可能会发现此网站对入门很有帮助:training.data-artisans.com
    猜你喜欢
    • 2021-11-19
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多