我是Dataflow的新手,所以这可能是一个简单的问题。GroupByKey在Google Cloud 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());
有几个问题可以帮助调试。这是批处理还是流式管道?你使用的是什么跑步者(直接,数据流,火花,闪光,......)这个问题是否在直接跑步者身上复制?除了“添加元素”消息外,您是否还有其他证据表明GBK中没有元素 - 例如如果添加另一个将分组KV写入TextIO的ParDo,它是否以空输出结束? – jkff
这是一个流式管道(我们从pubsub读取),使用DataflowPipelineRunner。还没有尝试与直接亚军呢。我试图在GroupByKey之后的ParDo中输出调试信息,但没有输出。我正在使用LOG.info(...)(我知道有效)进行调试。 虽然在GroupByKey中没有添加任何元素,但它有时会在Google Cloud的GroupByKey框中显示“1个元素/ s”。 –
我现在发现GroupByKey实际上工作 - 它只是非常慢。我必须等待几分钟才能显示日志输出。 GroupByKeys应该花费那么长时间,还是更可能是我做了一些愚蠢的事情。目前,我们没有给Dataflow大量的数据。 –