При применении WriteFiles к неограниченной PCollection необходимо явно указать количество выходных сегментов - PullRequest
0 голосов
/ 14 октября 2019

До сих пор я пытался написать 1 файл паркета для каждого объекта Window, но в итоге я получаю так много маленьких файлов, что не могу понять, что происходит, пока не нашел метод, о котором забыл, withNumSharsd().

Я использовал его, так как все примеры привели к этому, и в разработке мне не нужно было больше этого.

После того, как я протестировал это с гораздо большим количеством событий, настенное времяначал экспоненциально увеличиваться до более чем 1 дня!

Итак, копаясь в документах в коде, он в основном говорит, что размещение 0 вместо любого другого числа приведет к спецификации времени выполнения этих требуемых шардов.

При запуске mvn compile всплывает следующее сообщение.

When applying WriteFiles to an unbounded PCollection, must specify number of output shards explicitly

Нет ли опции, позволяющей указать количество сегментов при развертывании задания потока данных?

Я пытался добавить --outputNumShards=20 --errorOutputNumShards=10 к Dexec.args.

1 Ответ

1 голос
/ 15 октября 2019

Похоже, что если вы используете WriteFiles для записи файлов (все IO FileBasedSink используют его под капотом, например FileIO, TextIO и т. Д.), То вам все равно нужно вручную установить количество шардов на withNumShards(int)для неограниченных источников и должно быть больше 0 (см .: https://github.com/apache/beam/blob/release-2.16.0/sdks/java/core/src/main/java/org/apache/beam/sdk/io/WriteFiles.java#L314)

...