DataFlow выводит несколько файлов - PullRequest
0 голосов
/ 19 октября 2018

Видя что-то странное, когда я обрабатываю большой файл (5 миллионов + строк).В коде мое количество шардов установлено на 1. Тем не менее, когда я вижу, как выгружается более 15 файлов, и я не уверен, почему.Поиск в Google не дал мне ничего, чтобы объяснить, почему это происходит.

В качестве сниппета, вот часть вывода:

    results.get(valid).setCoder(StringUtf8Coder.of()).apply("Build Window For Valid Entries", Window.<String>into(new GlobalWindows()).triggering(Repeatedly.forever(AfterProcessingTime.pastFirstElementInPane().plusDelayOf(Duration.ZERO))).withAllowedLateness(Duration.ZERO).discardingFiredPanes())
    .apply("Write valid to GCS", TextIO.write().to(validFileLocation).withSuffix(".csv").withWindowedWrites().withNumShards(1));

У кого-нибудь есть идеи?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

В итоге я понял это.GlobalWindows - это хорошо, но лучший способ сделать то, что я пытался сделать, это использовать окна сеансов.Это решает проблему.

примером может быть Sessions.withGapDuration (Duration.standardSeconds (10))))

, где говорится: «через 10 секунд после последнего полученного пакета данных, если ябольше ничего не получайте, перейдите к выводу "

0 голосов
/ 21 октября 2018

Если ваш ввод неограничен, то как вы собираетесь писать только один файл?

TextIO должен либо дождаться окончания неограниченного ввода, либо обработать его с помощью оконного режима (ограничивающие данные).

Я не знаю ожидаемого поведения запуска в GlobalWindow, может быть, только последний файл содержит все данные?Или, может быть, вы достигли предела размера GCS?

Кроме того, GCS не допускает изменения файлов, вы можете только добавить или удалить файл.

...