2016-09-15 2 views
1

Я новичок в 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()); 
+0

Несколько вопросов, которые помогут отладить. Это пакетный или потоковый конвейер? Какой бегун вы используете (прямой, поток данных, искра, флинк, ...?) Воспроизводит ли проблема в Direct runner? У вас есть другие доказательства того, что в GBK нет элементов, кроме сообщения «Элементы добавлено», например, если вы добавите в него еще один ParDo, который записывает сгруппированные KV в TextIO, заканчивается ли он пустым выходом? – jkff

+0

Это потоковый конвейер (мы читаем из pubsub), используя DataflowPipelineRunner. Еще не пробовал с Direct runner. Я попытался вывести отладочную информацию в ParDo после GroupByKey, но ничего не выводится. Я использую LOG.info (...) (который, как я знаю, работает) для отладки. Хотя ни один элемент не добавлен в GroupByKey, он иногда говорит «1 элемент/с» внутри поля GroupByKey в Облаке Google. –

+0

Теперь я узнал, что GroupByKey работает на самом деле - это очень медленно. Мне пришлось подождать пару минут, пока не появится выход журнала. Должны ли GroupByKeys занять это долго, или это более вероятно, что я сделал что-то глупое. На данный момент мы не предоставляем Dataflow много данных. –

ответ

0

A GroupByKey пожаров в соответствии с пусковой стратегией, которая определяет, когда система считает, что все данные для этого ключа/окна были получены, и пришло время группировать его и переходить к преобразованиям вниз по течению. Стратегия по умолчанию:

триггер по умолчанию для PCollection основано одноразовое событие, и выдает результаты в окне, когда водяной знак системы (понятие DataFlow о когда он «должен» иметь все данные) проходит конец окна.

Подробнее см. Default Trigger. Вы видели задержку в пару минут, которая соответствовала прогрессированию водяного знака PubSub.

+0

Водяной знак PubSub или водяной знак потока данных? –

+0

Оценка потока данных водяного знака PubSub. Сам PubSub не предоставляет функцию водяного знака, поэтому Dataflow внутренне вычисляет оценку. – jkff

Смежные вопросы