2017-01-10 69 views
1

我有一个流式管道,它使用带时间戳标记的事件。我想要做的就是将它们批处理为1分钟的固定窗口,然后将窗口中的所有事件写入单个GCS文件。我可以使用FixedWindows,除了从文档中,我可以看到我需要一个GroupByCombine操作来应用窗口,但对于我的用例,Windowing已经完成了我需要的所有分组。我看到这个两个可能的解决方案,这两个我不知道是理想在没有GroupBy的情况下对数据使用FixedWindows

  • 推动这些项目到一个单一的GlobalWindow和重复应用1分钟触发,丢弃解雇窗格。我还没有尝试过这一点,我不知道这是否会工作没有一个组
  • FixedWindow之后运行全球Combine - 我不确定这是否仍然会考虑windows。

    这些是正确的选择还是有更好的办法?

感谢

回答

1

首先,我要解决你的目标:这听起来像你想组的所有值在一个特定的窗口。为此,您将需要一个GroupByKeyCombine(进行分组或汇总,而不是真的与窗口有关)。

全球Combine将考虑这个窗口。考虑Dataflow转换的最佳方式是它们都在的窗口内主要运行

我也想对你的信息的一些其他方面发表意见:

  • 实际上,对于非合并的窗前,仿佛FixedWindows窗口将立即在Window.into(FixedWindow.of(Duration.standardMinutes(1)))变换应用。
  • AfterProcessingTime.pastFirstElementInPane(Duration.standardMinutes(1))这样的触发器不会做你想做的事 - 它代表一个近似超时。在每个按键的基础上,在第一个元素到达后​​的一分钟本地时间之后的某个合理时刻,任何被缓冲的内容都将被发射。它不会对应于一分钟的事件时间,或任何特定的事件时间或到达时间窗口。
相关问题