У меня есть работа, которую нужно сделать многократно. Например, скажем, я хочу бросить 2000 кубиков и собрать результат. Оговорка - бросок кубика зависит от PCollection
Как это можно сделать с помощью Dataflow?Как сделать одну и ту же работу несколько раз с использованием Dataflow?
Я попытался использовать PCollectionList
, но в результате мой поток данных слишком велик, чтобы начать (> 10 МБ). Вот пример того, что я хотел бы сделать (с помощью PCollectionList
):
// I'd like to operate on things 2000 times.
PCollection<Thing> things = ...;
List<PCollection<ModifiedThing>> modifiedThingsList = new ArrayList<>();
for (int i = 0; i < 2000; ++i) {
modifiedThingsList.add(things.apply(ParDo.of(thing -> modify(thing)));
}
PCollection<ModifiedThing> modifiedThings = PCollectionList.of(modifiedThingsList).apply(Flatten.pCollections());
Поскольку представление JSON из приведенного графика слишком велика для DataFlow, мне нужен другой способ представления этой логики. Есть идеи?
Можете ли вы уточнить, «бросок кубика зависит от PCollection»? Это не очевидно из вашего фрагмента кода. – jkff
Например, «вещи» действительно были «PCollection». Примером «бросания кубиков» было бы добавить случайное число к каждому элементу в PCollection, повторяя процесс 2000 раз. Я попытался проиллюстрировать это с помощью вызова метода «модификация (вещь)». –
Max
Я все еще смущен: ParDo может возвращать произвольно большое количество выходов на вход. Можете ли вы просто вещи.apply (ParDo.of (c -> for (i = 0..2000) c.output (изменить (c.element())))) или я не понимаю, что вы пытаетесь сделать? – jkff