【发布时间】:2022-12-04 06:50:47
【问题描述】:
我正在使用 Spark,并且有一个基于 Spring Boot 的应用程序 bean:
@Component
@RequiredArgsConstructor
public class SomeService implements FlatMapFunction<T, K> {
private final ObjectMapper mapper;
}
ObjectMapper 这是从应用程序上下文中获取的标准。问题是应用程序失败并显示org.apache.spark.SparkException: Task not serializable。这是序列化堆栈:
Caused by: java.io.NotSerializableException: org.springframework.http.converter.json.SpringHandlerInstantiator
Serialization stack:
- object not serializable (class: org.springframework.http.converter.json.SpringHandlerInstantiator, value: org.springframework.http.converter.json.SpringHandlerInstantiator@6e4912db)
- field (class: com.fasterxml.jackson.databind.cfg.BaseSettings, name: _handlerInstantiator, type: class com.fasterxml.jackson.databind.cfg.HandlerInstantiator)
- object (class com.fasterxml.jackson.databind.cfg.BaseSettings, com.fasterxml.jackson.databind.cfg.BaseSettings@155616d8)
- field (class: com.fasterxml.jackson.databind.cfg.MapperConfig, name: _base, type: class com.fasterxml.jackson.databind.cfg.BaseSettings)
- object (class com.fasterxml.jackson.databind.DeserializationConfig, com.fasterxml.jackson.databind.DeserializationConfig@66e72ca2)
- field (class: com.fasterxml.jackson.databind.ObjectMapper, name: _deserializationConfig, type: class com.fasterxml.jackson.databind.DeserializationConfig)
- object (class com.fasterxml.jackson.databind.ObjectMapper, com.fasterxml.jackson.databind.ObjectMapper@433ef204)
- field (class: com.smth.SomeService, name: mapper, type: class com.fasterxml.jackson.databind.ObjectMapper)
所以问题是关于不可序列化的SpringHandlerInstantiator。
到目前为止,我通过在构造函数中手动分配 mapper 字段来解决这个问题:
public SomeService() {
this.mapper = new ObjectMapper();
}
有没有办法以某种方式正确解决这个问题,我。 e.依赖Spring的DI?
我使用 Spring Boot 2.6.7 和 Spark 2.11。
【问题讨论】:
标签: java spring apache-spark jackson objectmapper