当前位置: 首页 > 知识库问答 >
问题:

GlobalWindows在Flink中的同一个GlobalWindows中指定具有相同键的元素?

毕胡非
2023-03-14

根据下面的文档“全局窗口赋值器将具有相同密钥的所有元素分配给同一个全局窗口”

https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/windows.html

然后我检查了源代码,发现GlobalWindows的assignWindows方法只返回全局窗口,没有对参数元素执行任何操作,那么如何将具有相同键的所有元素都返回到同一个全局窗口呢?

https://github.com/apache/flink/blob/12b4185c6c09101b64e12a84c33dc4d28f95cff9/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/windowing/assigners/GlobalWindows.java

@Override
public Collection<GlobalWindow> assignWindows(Object element, long timestamp, WindowAssignerContext context) {
    return Collections.singletonList(GlobalWindow.get());
}

共有1个答案

汪博艺
2023-03-14

在Flink,窗户和钥匙在很大程度上是相互独立的。流元素可以按键和窗口分组,这是正交维度。(当我们要讨论窗口与键的组合时,这称为窗格。)

窗口实例没有键,窗口赋值器也没有。相反,键和键分区状态是评估窗口的运行时上下文的一部分。

当我试图理解键与窗口分配符的关系时,我发现通读WindowOP的Process Element实现很有帮助。当每个流元素到达一个窗口运算符时,都会调用此代码。注意键的作用,同时省略许多其他细节,我们看到了这一点:

public void processElement(StreamRecord<IN> element) throws Exception {
    final Collection<W> elementWindows = windowAssigner.assignWindows(
        element.getValue(), element.getTimestamp(), windowAssignerContext);

    ...

    final K key = this.<K>getKeyedStateBackend().getCurrentKey();

    ...

    for (W window: elementWindows) {

        ...

        windowState.add(element.getValue());

        triggerContext.key = key;
        triggerContext.window = window;

        TriggerResult triggerResult = triggerContext.onElement(element);
        if (triggerResult.isFire()) {
            ...
            emitWindowContents(window, contents);
        }

        ...
    }
}

在这里,您可以看到,该键可通过getKeyedStateBend()供窗口操作符使用,但直到从窗口赋值器中获取该元素的窗口之后,该键才被检索。窗口赋值器执行其工作时不需要考虑任何键。

不过,稍后会提取密钥,以便可以通过触发器上下文将其提供给触发器。

 类似资料:
  • 问题内容: 我有以下代码来获取地图: 如何打印带有重复键的消息“重复键”? 问题答案: 如何打印带有重复键的消息“重复键”? 使用当前代码,您将收到消息“重复键”,其中包含至少2个实例的列表,这些实例具有与对象相同的值,例如。 如何获得对应的密钥? 到目前为止,还无法获得相应的键,当前从合并功能中获得的实际上是与相同键映射的2个值,这些值需要合并以仅保留对应键的一个值。 您的问题是 Java 9

  • 问题内容: 我对Python中的字典有疑问。 这里是: 我有一个像 现在,我想通过相同的值获取所有关键元素,并将其保存在新的字典中。 新的Dict应该如下所示: 问题答案: 如果您对新字典中的列表而不是元组感到满意,则可以使用 如果您想避免使用,也可以这样做

  • 我今天面试了,我的面试官问我如何在HashMap中存储具有相同键的多个值?她给了我这个例子—— 我在如何使用HashMap时给了她以下解决方案: 整数是字符串的长度,ArrayList将存储该特定长度的字符串。 面试官说这是使用HashMap的一种方式,但还有另一种方式我不需要ArrayList或任何其他数据结构。在面试期间,我无法想出任何解决方案,现在在谷歌搜索了足够多之后,我仍然一无所获。有人

  • 我在Wordpress和Visual Composer一起工作,我有一个切换容器。基本上,我点击每个选项卡,下面的内容就会发生变化。我想通过CSS为每个选项卡分配一个不同的图像作为背景。但是,我已经实现了这一点,因为每个选项卡都有相同的类名(由visual composer赋予它),所以图像是相同的。我需要弄清楚如何给每个选项卡一个唯一的id,这样我就可以给每个选项卡一个自己的背景图像--但是由于

  • 我想创建一个包含所有价格选项的列表,并将唯一的值放在下拉列表中,所以我这样做: 此代码引发错误: 警告:遇到具有相同键的两个子项。键应该是唯一的,以便组件在更新时维护它们的标识。非唯一键可能导致重复和/或省略子键-此行为不受支持,并且可能在未来版本中更改。 从到 更新我也添加到它呈现的地方。 和SearchHandlerPrice:

  • 问题内容: 我在这里面临一个简单的问题。我有两个要读取的属性文件,以创建两个数据源。但是这些属性文件具有完全相同的键!我可以使用以下方式读取两个文件: 但是,然后我无法访问正确的值: 如何读取属性,以便可以使用诸如之类的变量并知道调用哪个变量? 感谢您的帮助! 问题答案: 尝试这样的事情(未经测试):