Hazelcast Jet - как использовать нестатический метод в конвейере Jet

У меня есть базовый конвейер ниже. На одном из шагов я хочу преобразовать объект, вызвав метод из службы, как показано ниже. Но Jet выдает ошибку, говоря, что этот mapFn не сериализуемый. Что тут делать? Он отлично работает со статическими методами.

p.readFrom(source)
     .map(r -> dataTransformer.transformRecord(r))// dataTransformer is a service
     .writeTo(Sinks.filesBuilder(userHome).build());

person Rajesh    schedule 31.08.2020    source источник


Ответы (1)


Используйте mapUsingService и создайте службу, используя ServiceFactory:

p.readFrom(source)
 .mapUsingService(
    ServiceFactories.sharedService(pctx -> new DataTransformer()),
    (dataTransformer, r) -> dataTransformer.transformRecord(r))
 ...

В качестве альтернативы, если ваша служба сериализуема и не имеет состояния, вы можете скопировать ее в локальную переменную:

DataTransformer dataTransformerLocal = dataTransformer;
p.readFrom(source)
     .map(r -> dataTransformerLocal.transformRecord(r))
     .writeTo(Sinks.filesBuilder(userHome).build());
person Oliv    schedule 02.09.2020