在Python的Apache Beam中使用OrFinally定义自定义触发器的语法是否正确?

在Python的Apache Beam中使用OrFinally定义自定义触发器的语法是否正确?,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,我试图为滑动窗口定义一个自定义触发器,该窗口会对每个元素重复触发,但最终也会在水印结束时触发。我已经查阅了将近一个小时的文档,但还没有找到任何示例:( 这就是我现在正在尝试的,显然这不起作用,但我对正确的语法非常迷茫。你能试着像下面那样更改触发器,看看吗 trigger=OrFinally(Repeatedly(AfterCount(1)), AfterWatermark()), accumulation_mode=beam.transforms.trigger.AccumulationMode

我试图为滑动窗口定义一个自定义触发器,该窗口会对每个元素重复触发,但最终也会在水印结束时触发。我已经查阅了将近一个小时的文档,但还没有找到任何示例:(


这就是我现在正在尝试的,显然这不起作用,但我对正确的语法非常迷茫。

你能试着像下面那样更改触发器,看看吗

trigger=OrFinally(Repeatedly(AfterCount(1)), AfterWatermark()),
accumulation_mode=beam.transforms.trigger.AccumulationMode.DISCARDING

你能试着像下面那样改变触发器吗

trigger=OrFinally(Repeatedly(AfterCount(1)), AfterWatermark()),
accumulation_mode=beam.transforms.trigger.AccumulationMode.DISCARDING

不幸的是,这不起作用。错误:
indexer错误:元组索引超出范围
我尝试了类似于:
trigger=OrFinally(反复(AfterCount(1)),AfterWatermark())
这样运行时不会抛出错误,但这是否达到了我们预期的效果?查看源代码()它看起来像OrFinally()需要一些iterable触发器,但我不确定它需要触发器的顺序。从它的外观来看,第二个触发器是最终调用的触发器,但我不太确定。昨天刚开始使用Beam:)我更新了我的答案。你可以看一下,你需要一个重复的触发器来保持对不同事件的触发。AfterAny将确保如果有超过1个触发器,如果任何人满意,它将运行。最后,我们将确保一旦启动,触发器就会停止。对于用例场景,触发器将每1行重复运行
,直到最后窗口关闭。希望对您有所帮助,欢迎来到Beam:)谢谢您的回复!抱歉,我仍然无法让您的示例发挥作用。看起来OrFinally函数接受了不止一个参数,Python给了我一个语法错误。因此,如果我理解正确,当满足orFinally()条件时,重复触发器将不再触发。在滑动窗口的情况下,这是否意味着只有一个滑动窗口会因AfterWatermark()而触发,并且一旦发生这种情况,将不会再发射更多窗口?非常感谢!很抱歉,我没有用Python编写太多代码,但是您使用的触发器定义是正确的。如果您查看
或finally
,它会在任何
之后扩展。当任何子触发器触发时,
AfterAny
触发器触发,当任何子触发器完成时,触发结束。在这种情况下,它将在窗口的水印结束时结束。每个滑动窗口都有自己的水印和窗口闭合。一个窗口可以有多个窗格,这是第一个触发器将通过重复触发器发出的。希望这是清楚的。不幸的是,这不起作用。错误:
indexer错误:元组索引超出范围
我尝试了类似这样的操作:
trigger=OrFinally(重复(AfterCount(1)),AfterWatermark())
并且运行时没有抛出错误,但这是否达到了我们预期的效果?查看源代码(),看起来OrFinally()需要一些iterable触发器,但我不确定它需要触发器的顺序。从外观上看,第二个触发器是被称为finally的触发器,但我不太确定。昨天刚开始与Beam合作:)我已经更新了我的答案。你可以看一下,你需要一个重复的触发器来保持对不同事件的触发。AfterAny将确保如果有超过1个触发器,如果任何人满意,它将运行。最后,我们将确保一旦启动,触发器就会停止。对于用例场景,触发器将每1行重复运行
,直到最后窗口关闭。希望对您有所帮助,欢迎来到Beam:)谢谢您的回复!抱歉,我仍然无法让您的示例发挥作用。看起来OrFinally函数接受了不止一个参数,Python给了我一个语法错误。因此,如果我理解正确,当满足orFinally()条件时,重复触发器将不再触发。在滑动窗口的情况下,这是否意味着只有一个滑动窗口会因AfterWatermark()而触发,并且一旦发生这种情况,将不会再发射更多窗口?非常感谢!很抱歉,我没有用Python编写太多代码,但是您使用的触发器定义是正确的。如果您查看
或finally
,它会在任何
之后扩展。当任何子触发器触发时,
AfterAny
触发器触发,当任何子触发器完成时,触发结束。在这种情况下,它将在窗口的水印结束时结束。每个滑动窗口都有自己的水印和窗口闭合。一个窗口可以有多个窗格,这是第一个触发器将通过重复触发器发出的。希望这是清楚的。