我是Dataflow的新手,所以这可能是一个简单的问题。
我想试试Sessions窗口策略。根据窗口文档,在我们完成GroupByKey之前不会应用窗口,所以我试图这样做。
但是,当我在Google Cloud Platform中查看我的管道时,我可以看到MapElements返回元素,但GroupByKey没有返回任何元素("添加的元素: - ")。按键分组时我做错了什么?
这是代码中最相关的部分:
events = events
.apply(Window.named("eventsSessionsWindowing")
.<MyEvent>into(Sessions.withGapDuration(Duration.standardSeconds(3)))
);
PCollection<KV<String, MyEvent>> eventsKV = events
.apply(MapElements
.via((MyEvent e) -> KV.of(ExtractKey(e), e))
.withOutputType(new TypeDescriptor<KV<String, MyEvent>>() {}));
PCollection<KV<String, Iterable<MyEvent>>> eventsGrouped = eventsKV.apply(GroupByKey.<String, MyEvent>create());
答案 0 :(得分:0)
根据触发策略触发GroupByKey
,该策略确定系统何时认为已接收到该密钥/窗口的所有数据,并且是时候对其进行分组并传递给下游变换。默认策略是:
PCollection的默认触发器是基于事件时间的,并在系统的水印时发出窗口的结果(数据流&#39;它的概念&#34;应该&#34;全部数据)传递窗口的末尾。
有关详细信息,请参阅Default Trigger。您看到了几分钟的延迟,这与PubSub的水印进展相对应。