当前位置: 首页 > 知识库问答 >
问题:

如何在Flink中使用LocalDate字段高效地序列化POJO?

辛可人
2023-03-14
org.apache.flink.api.java.typeutils.TypeExtractor - Class class java.time.LocalDate cannot be used as a POJO type because not all fields are valid POJO fields, and must be processed as GenericType. Please read the Flink documentation on "Data Types & Serialization" for details of the effect on performance.

共有1个答案

南门意蕴
2023-03-14

由于向后兼容性,即使Flink中引入了新的序列化程序,也不能自动使用它。但是,您可以这样告诉Flink将其用于您的POJO(如果您使用Kryo在没有先前保存点的情况下开始):

@TypeInfo(MyClassTypeInfoFactory.class)
public class MyClass {
  public int id;
  public LocalDate date;
  // ...
}

public class MyClassTypeInfoFactory extends TypeInfoFactory<MyClass> {
  @Override
  public TypeInformation<MyClass> createTypeInfo(
      Type t, Map<String, TypeInformation<?>> genericParameters) {

    return Types.POJO(MyClass.class, new HashMap<String, TypeInformation<?>>() { {
        put("id", Types.INT);
        put("date", Types.LOCAL_DATE);
        // ...
    } } );
  }
}

您必须为POJO的所有字段提供类型,如图所示,但是types类中有很多帮助器可以使用。此外,通过像这样使用typeInfoFactory,您不必担心Flink使用该类型的所有位置-它总是派生给定的类型信息。

如果需要转换旧的保存点以使用新的序列化程序,您可能还需要查看Flink的状态处理器API。

 类似资料:
  • 我需要通过flink消费Kafka,不幸的是,Kafka消息是在serde中使用原型,完全不知道如何处理它,这里是来自互联网的代码,但我不能使它工作。 这不起作用,它会让NPE: 有人知道我做错了什么吗?使用twitter ProtobufSerializer是唯一值得拥有protobuf的方法吗?还是还有别的路要走?

  • 我想有条件地序列化一个字段。我想出了如何有条件地忽略带有 但我真正想做的是编辑字段。所以如果我有 我明白了 字段2被正确忽略。但我真正想要的是 我还有一个注释, 所以我想做的是把它们结合起来。因此,如果一个字段有特殊的注释,并且我正在使用我的内省器,只有在那时,我才想编辑该字段。否则,该字段应正常序列化。

  • 问题内容: 我正在使用Java 8 java.time.LocalDate来解析日期。 但是尝试将LocalDate对象插入到mongodb中。我在Java驱动程序中收到错误: 错误日志: java.lang.RuntimeException:json无法序列化类型:com.mongodb.util.JSONSerializers $ MapSerializer.serialize(JSONSer

  • java.lang.runtimeException:json无法序列化类型:在com.mongodb.util.ClassMapBasedObjectSerializer.serializer(ClassMapBasedObjectSerializer.java:77)在com.mongodb.util.ClassMapBasedObjectSerializer.serializer(jsonS

  • 问题内容: 好像生成带有对象的随机分布字段的JSON代码。有办法解决字段顺序问题吗? 字符串jsonRequest可以是: (正确) (顺序错误) 问题答案: 如果GSON不支持字段顺序的定义,那么其他库也可以。例如,Jackson允许使用@JsonPropertyOrder进行定义。对我来说,必须指定自己的自定义序列化程序似乎很繁琐。 是的,我同意按照JSON规范,应用程序不应期望字段的特定顺序

  • 问题内容: 我的直觉告诉我,必须以某种方式将其转换为字符串或byte [](在Go中甚至可能是相同的东西?),然后将其保存到磁盘。 我找到了这个包(http://golang.org/pkg/encoding/gob/),但似乎仅用于结构? 问题答案: 序列化数据有多种方法,Go为此提供了许多软件包。某些常见编码方式的软件包: 处理地图很好。以下示例显示了地图的编码/解码: 操场