google-cloud-platform - Apache Beam 中无界 pcollections 的全局窗口的默认行为是什么?
问题描述
我最近看了很多文章,包括官方文档,试图了解 Global Window 在 Apache Beam 中是如何工作的。我已经在 Stackoverflow 中阅读了类似的问题,但我无法理解。
根据官方文档:
如果您正在处理无界数据集(例如来自流数据源),则可以使用单个全局窗口,但在应用诸如 GroupByKey 和 Combine 之类的聚合转换时要小心。具有默认触发器的单个全局窗口通常需要整个数据集在处理之前可用,这在不断更新数据的情况下是不可能的。
所以 Global Window 没有结局,它是有道理的,因为它是全球性的。文档建议在进行聚合时使用非默认触发器,因为默认触发器是在窗口关闭时触发窗格:
设置非默认触发器。这允许全局窗口在其他条件下发出结果,因为默认的窗口行为(等待所有数据到达)永远不会发生。
我对此感到困惑。这里的逻辑是全局窗口无法将事件触发到管道的下一步,因为它永远不会结束,因此默认触发器永远不会发生。
有人可以向我澄清这个问题吗?具有默认触发器的默认全局窗口如何在 Apache Beam 中用于无界 pcollections?我假设它根本不聚合结果,只是在事件到达时一一处理。我想确定是不是这样。
解决方案
默认触发器是在水印到达Window
基于事件时间的末尾时触发。这永远不会发生在 aGlobalWindow
所以如果你使用GlobalWindow
默认触发器将永远不会被触发。
但是,如果您设置了一个非默认触发器,例如在处理了一定数量的元素后触发(使用AfterCount
触发器),您的元素甚至可以为GlobalWindow
. 有关 Beam 触发器的更多信息,请参见此处。
推荐阅读
- javascript - 使用最新数据从 Cloud Firestore 中获取数据
- python - 如何将错误陷阱循环回原始问题
- user-interface - 如何在 azure(VSTS)devops 管道上运行黄瓜 appium 测试用例
- vba - 在 Access 记录集中比较 Outlook 时间
- html - 强制可变宽度表格列内容以最大宽度换行*仅*
- gojs - 我们可以将像 iframe 这样的自定义 html 控件添加到 GOJS 节点吗?
- javascript - 将 webpack 与 express 和 ejs 一起用于前端和/或服务器
- jquery - 使用 jQuery 翻译动态字符串
- python - TF上的Keras,如何在不执行梯度下降的情况下获得每个示例的损失值?
- javascript - 如何根据 Ajax 中的复选框呈现不同的 url?