java.util.HashMap 和 java.time.Duration 不是 Flink 的有效 POJO 类型

问题描述 投票:0回答:1

我的 Flink 1.15 应用程序的日志中有“java.time.Duration”和“java.util.HashMap”的提示:

Class class <*> 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.

Duration 和 HashMap 有 Flink 兼容类吗?

amazon-web-services apache-flink flink-streaming
1个回答
0
投票

Hashmap 应该通过 Flink 原生的内置序列化过程来支持,因为它们是一些更常用的数据结构。另一方面,持续时间不会落在同一个保护伞下,可能需要对其中一个进行一些修改:

  • 考虑 Duration 的本机、可序列化表示(例如纪元毫秒等)并存储它而不是 Duration 对象。
  • 考虑实现自定义序列化器,以对 Duration 对象的序列化进行更细粒度的控制(请参阅相关文档)。

另一个常见的失误是确保您尝试序列化的类实现

Serializable
接口。这似乎是一件显而易见的事情,但我发现它是必需的:

class YourClass : Serializable {}

POJO 序列化的相关文档对于确保您的类检查所有适当的框和以下规则非常有用:

  • 课程必须是公开的。
  • 它必须有一个不带参数的公共构造函数(默认构造函数)。
  • 所有字段要么是公共的,要么必须可通过 getter 和 setter 函数访问。对于名为 foo 的字段,getter 和 setter 方法必须命名为 getFoo() 和 setFoo()。
  • 字段的类型必须由注册的序列化器支持。
© www.soinside.com 2019 - 2024. All rights reserved.