gpt4 book ai didi

scala - Apache Flink,获取窗口中的最后一个事件

转载 作者:行者123 更新时间:2023-12-02 03:04:05 27 4
gpt4 key购买 nike

我正在做一个项目,我有一个大小为 4 天的窗口,步长为 1 天

.timewindow(Time.days(4), Time.days(1))

我也有一个触发器

.trigger(new myTrigger)


onEventTime ---> Continue
onProccessingTime ---> Continue
clear ---> Purge
onElement---> (if element.isFinalTransaction) TriggerResult.FIRE_AND_PRUGE

isFinalTransaction 是一个 bool 值,当为真时它调用 FAP。平均问题是我如何根据元素是否是窗口中的最后一个元素使其返回 true/false

有什么方法可以告诉我们当前元素是否是窗口中的最后一个元素?有什么方法可以告诉我们当前窗口是否完成(滑动之前)?

最佳答案

来自抽象触发器类(https://github.com/apache/flink/blob/master//flink-streaming-java/src/main/java/org/apache/flink/streaming/api/windowing/triggers/Trigger.java)

简短的回答是否定的。为添加到 Pane 的每个元素调用 onElement 方法。当一个元素被添加时,不可能知道它是否是最后一个元素,因为直到下一个元素出现才知道该信息(我们会看到它是在这个窗口中还是在下一个窗口中)。

但是,一种替代方法是检查元素是否足够接近窗口末尾的末尾(因为 onElement 可以访问窗口,例如 if (timestamp > window.getEnd - delta) ...

但是,我想不出我会推荐它的用例。如果您需要访问窗口中的最后一个元素,您应该只使用 WindowFunction 并在 apply 方法中获取输入可迭代 (input.last) 的最后一个元素。

关于scala - Apache Flink,获取窗口中的最后一个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48748682/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com