При индексировании с учетом состояния ParDo запускается однопоточным в Dataflow Runner

сноДокументация по Apache Beam 2.0.0 SDK GroupIntoBatches работает только сKV коллекции.

Мой набор данных содержит только значения, и нет необходимости вводить ключи. Тем не менее, чтобы использоватьGroupIntoBatches Мне пришлось реализовать «поддельные» ключи с пустой строкой в ​​качестве ключа:

static class FakeKVFn extends DoFn<String, KV<String, String>> {
  @ProcessElement
  public void processElement(ProcessContext c) {
    c.output(KV.of("", c.element()));
  }
}

Таким образом, общий конвейер выглядит следующим образом:

public static void main(String[] args) {
  PipelineOptions options = PipelineOptionsFactory.create();
  Pipeline p = Pipeline.create(options);

  long batchSize = 100L;

  p.apply("ReadLines", TextIO.read().from("./input.txt"))
      .apply("FakeKV", ParDo.of(new FakeKVFn()))
      .apply(GroupIntoBatches.<String, String>ofSize(batchSize))
      .setCoder(KvCoder.of(StringUtf8Coder.of(), IterableCoder.of(StringUtf8Coder.of())))
      .apply(ParDo.of(new DoFn<KV<String, Iterable<String>>, String>() {
        @ProcessElement
        public void processElement(ProcessContext c) {
          c.output(callWebService(c.element().getValue()));
        }
      }))
      .apply("WriteResults", TextIO.write().to("./output/"));

  p.run().waitUntilFinish();
}

Есть ли способ группировать по партиям, не вводя «поддельные» ключи?

Ответы на вопрос(1)

Ваш ответ на вопрос