Avrocoder требует конструктора по умолчанию в Directrunner локально, но работает над GCP Dataflow - почему?JAVA

Программисты JAVA общаются здесь
Anonymous
Avrocoder требует конструктора по умолчанию в Directrunner локально, но работает над GCP Dataflow - почему?

Сообщение Anonymous »

Я испытываю противоречивое поведение между дирекэктриндером Apache Beam (локальный) и Dataflowrunner (gcp) при использовании

Код: Выделить всё

AvroCoder
с неизменным классом [/b].
Проблема
У меня есть неизменная класс, определяемый с использованием Lombok:

Код: Выделить всё

@Builder
@Value
public class EventWrapper {
private final byte[] inputPayload;
private final Map attributes;

// No default constructor - class is immutable
}
< /code>
В моем тесте на конвейер пучка: < /p>
AvroCoder coder = AvroCoder.of(EventWrapper.class);

PCollection input = pipeline.apply(
Create.of(TestUtil.buildEventWrapper()).withCoder(coder)
);

PCollection result = input.apply(
"Process Events",
ParDo.of(new EventProcessorDoFn())
);
// Assertions...
pipeline.run().waitUntilFinish();
Этот же Avrocoder работает нормально при развертывании в Google Cloud Dataflow , но тестовый пример локально сбои с Directrunner с следующим исключением:
Ошибка на Directrunner

на Directrunner

Код: Выделить всё

java.lang.RuntimeException: java.lang.NoSuchMethodException: EventWrapper.()
at org.apache.avro.specific.SpecificData.newInstance(SpecificData.java:493)
...
at org.apache.beam.sdk.transforms.Create$Values$2.apply(Create.java:430)
Environment

[*]Apache Beam: 2.64.0
[*]Java: 17
[*]Local: macOS, DirectRunner
Remote: GCP DataFlow < /li>
< /ul>

Мои вопросы: < /h3>

Почему Avrocoder.of (eventwrapper.class) < /code> gcp dataflow, но локально не выполняет локально с дирректриннером? /> Существуют ли различия в том, как сериализация обрабатывается между Directrunner и Dataflow?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... rks-on-gcp

Вернуться в «JAVA»