У меня есть большой граф ~ 100 тыс. вершин и ~ 1 миллион ребер, которые строятся в функции DoFn
. Когда я пытаюсь вывести этот график в DoFn, выполнение функции останавливается на c.output(graph);
.
public static class Prep extends DoFn<TableRow, TableRows> {
@Override
public void processElement(ProcessContext c) {
//Graph creation logic runs very fast, no problem here
LOG.info("Starting Graph Output"); // can see this in logs
c.output(graph); //outputs data from DoFn function
LOG.info("Ending Graph Output"); // never see this logs
}
}
Мой класс графа - это просто карта вершин, сериализуемых с помощью AvroCoder.
import org.apache.avro.reflect.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.X.Prep;
import com.google.cloud.dataflow.sdk.coders.AvroCoder;
import com.google.cloud.dataflow.sdk.coders.DefaultCoder;
//Class that creates Graph data structure for custom seg definitions
@DefaultCoder(AvroCoder.class)
public class MyGraph {
@Nullable
public Map<String,GraphVertex> vertexList = new HashMap<String,GraphVertex>();
}
Я пробовал сериализацию json-simple, gson, jackson json, и все они слишком долго сериализуют этот график.
PCollection<Key, Value>
(обрабатывается параллельно)? В качестве альтернативы, поскольку логика создания графа работает очень быстро, просто запускайте эту логику для каждого рабочего, а не пытаетесь сериализовать весь граф? - person Ben Chambers   schedule 23.05.2017