Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud dataflow 有没有一种方法可以在没有sideInput的情况下向ParDo中注入和配置?_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Google cloud dataflow 有没有一种方法可以在没有sideInput的情况下向ParDo中注入和配置?

Google cloud dataflow 有没有一种方法可以在没有sideInput的情况下向ParDo中注入和配置?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我有一个ParDo,它使用状态和计时器以及定期更新的PcollectionView作为该ParDo的侧输入;google dataflow将抛出一个异常,在这种情况下不允许使用计时器。有没有另一种方法可以在没有sideInput的情况下将配置数据提供给parDo?实际上,sideInput是一个配置数据的映射,大约每24小时从数据存储中读取一次 我目前正在尝试看看是否可以在具有状态和计时器的ParDo之前创建一个ParDo,以定期更新配置,但我不知道如何从下一个ParDo中访问该映射。有什么建议

我有一个ParDo,它使用状态和计时器以及定期更新的PcollectionView作为该ParDo的侧输入;google dataflow将抛出一个异常,在这种情况下不允许使用计时器。有没有另一种方法可以在没有sideInput的情况下将配置数据提供给parDo?实际上,sideInput是一个配置数据的映射,大约每24小时从数据存储中读取一次

我目前正在尝试看看是否可以在具有状态和计时器的ParDo之前创建一个ParDo,以定期更新配置,但我不知道如何从下一个ParDo中访问该映射。有什么建议吗


注意:此管道以流模式运行,带有全局窗口,并在pubsub消息到达时读取消息。数据存储用于保存决定何时将元素输出到pubsub主题所需的数据。

您可以使用固定窗口定期使用数据源更新PCollectionView,而不是使用状态计时器更新侧面输入:

        PCollectionView<Map<String,String>> sideInput = pipeline
                .apply(notifications)
                .apply(
                        Window.<Long>into(FixedWindows.of(Duration.standardMinutes(refreshMinutes)))
                                .triggering(
                                        Repeatedly.forever(AfterPane.elementCountAtLeast(1))
                                )
                                .withAllowedLateness(Duration.ZERO)
                                .discardingFiredPanes()
                )
                .apply( /* query data source */ )
                .apply(View.<Map<String,String>>asSingleton());
PCollectionView sideInput=管道
.应用(通知)
.申请(
进入(FixedWindows.of(Duration.standardMinutes(refreshMinutes)))
.触发(
重复。永远(AfterPane.ElementCount至少(1))
)
.允许延迟(持续时间为零)
.丢弃Firedpanes()
)
.apply(/*查询数据源*/)
.apply(View.asSingleton());

您可以使用固定窗口定期使用数据源更新PCollectionView,而不是使用状态计时器来更新侧面输入:

        PCollectionView<Map<String,String>> sideInput = pipeline
                .apply(notifications)
                .apply(
                        Window.<Long>into(FixedWindows.of(Duration.standardMinutes(refreshMinutes)))
                                .triggering(
                                        Repeatedly.forever(AfterPane.elementCountAtLeast(1))
                                )
                                .withAllowedLateness(Duration.ZERO)
                                .discardingFiredPanes()
                )
                .apply( /* query data source */ )
                .apply(View.<Map<String,String>>asSingleton());
PCollectionView sideInput=管道
.应用(通知)
.申请(
进入(FixedWindows.of(Duration.standardMinutes(refreshMinutes)))
.触发(
重复。永远(AfterPane.ElementCount至少(1))
)
.允许延迟(持续时间为零)
.丢弃Firedpanes()
)
.apply(/*查询数据源*/)
.apply(View.asSingleton());

你好,Ryan,感谢您的回复。我使用带有状态和计时器的parDo来跟踪某些键并累积它们的值。因为我使用的是一个全局窗口,如果键从未返回,那么状态将不会被清除,因此使用计时器回调。sideInput有配置数据作为何时输出数据。简而言之,我没有使用状态计时器来更新sideInput,我使用了tick方法()嗨,Ryan,谢谢你的回复。我使用带有状态和计时器的parDo来跟踪某些键并累积它们的值。因为我使用的是一个全局窗口,如果键从未返回,那么状态将不会被清除,因此使用计时器回调。sideInput有配置数据作为何时输出数据。简而言之,我没有使用状态计时器来更新sideInput,我使用的是tick方法()