Я новичок в Dataflow, так что это, вероятно, простой вопрос.GroupByKey не возвращает никаких элементов в облачном потоке данных Google
Я хочу попробовать стратегию оконтуривания сеансов. В соответствии с документацией оконной документации, окно не применяется до тех пор, пока мы не выполним команду 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());
Несколько вопросов, которые помогут отладить. Это пакетный или потоковый конвейер? Какой бегун вы используете (прямой, поток данных, искра, флинк, ...?) Воспроизводит ли проблема в Direct runner? У вас есть другие доказательства того, что в GBK нет элементов, кроме сообщения «Элементы добавлено», например, если вы добавите в него еще один ParDo, который записывает сгруппированные KV в TextIO, заканчивается ли он пустым выходом? – jkff
Это потоковый конвейер (мы читаем из pubsub), используя DataflowPipelineRunner. Еще не пробовал с Direct runner. Я попытался вывести отладочную информацию в ParDo после GroupByKey, но ничего не выводится. Я использую LOG.info (...) (который, как я знаю, работает) для отладки. Хотя ни один элемент не добавлен в GroupByKey, он иногда говорит «1 элемент/с» внутри поля GroupByKey в Облаке Google. –
Теперь я узнал, что GroupByKey работает на самом деле - это очень медленно. Мне пришлось подождать пару минут, пока не появится выход журнала. Должны ли GroupByKeys занять это долго, или это более вероятно, что я сделал что-то глупое. На данный момент мы не предоставляем Dataflow много данных. –