Хорошо, я продолжил работать над проблемой и, прочитав какой-то источник, смог решить ее.Оказывается, что для ввода ParDo.of(new DoFn())
требуется, чтобы вход имел форму KV<T,U>
.
Поэтому, чтобы прочитать файл и создать индекс для каждой строки, мне нужно пропустить его через объект Key Value Pair.Ниже я добавил код:
public static class FakeKvPair extends DoFn<String, KV<String, String>> {
@ProcessElement
public void processElement(ProcessContext c) {
c.output(KV.of("", c.element()));
}
}
И изменил конвейер на:
Pipeline p = Pipeline.create(options);
p.apply(TextIO.read().from("gs://randomBucket/file.txt"))
.apply(ParDo.of(new FakeKvPair()))
.apply(ParDo.of(new createIndex()));
Новая проблема, которая возникает, заключается в том, сохраняется ли порядок строк, так как я выполняюдополнительная функция ParDo (которая может потенциально изменить порядок строк) перед передачей на createIndex()
.
На моем локальном компьютере порядок сохранен, но я не уверен, как это масштабируется до Dataflow.Но я задам это другим вопросом.