python Dataflow DoFn生命周期中beam setup()刷新多长时间



我有一个流式管道,需要从BigQuery中查询,作为管道转换的参考。由于BigQuery表只在两周内更改,所以我将查询缓存放在setup((中,而不是start_bundle((中。通过观察日志,我发现start_bundle((将在DoFn生命周期中刷新其值,大约50-100个元素进程,但setup((永远不会刷新。有什么办法解决这个问题吗?

虽然您没有向您提供代码,但我将根据您的解释回答您的问题。

首先,关于DoFn.start_bundle((,每个bundle都会调用此函数,由DataFlow根据执行过程中收集的度量来决定这些bundle的大小。

第二个,DoFn.setup((为每个工作者调用一次。只有在工作者重新启动时才会再次调用它。此外,作为比较,每个元素调用一次DoFn.processElement((。

由于您需要每周刷新查询两次,因此使用";缓慢改变查找缓存";。当您有一个随时间变化的查找表时,可以使用这种方法。因此,您需要更新查找的结果。但是,您可以使用流模式,而不是在批处理模式中使用单个查询。它允许您根据GlobalWindow更新查找结果(在您的情况下是查询结果(。之后,有了这个侧输入,您就可以在主流PCollection中使用它。

注意:我必须指出,作为一个限制,输入无法正确处理大量数据(许多GB或Tb(。此外,解释内容丰富

上面的答案很好。作为替代方案,您可以调用start_bundle()中的方法,只要它足够新鲜,就返回结果的缓存版本,否则从BQ中进行完全读取。请参阅,例如,内存缓存中的Python与生存时间

最新更新