我是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大量的數據。 –