flink:scala case类通过kryo序列化为generictype

68de4m5k  于 2021-07-15  发布在  Flink
关注(0)|答案(1)|浏览(335)

在我的flink应用程序(flink1.10.1)中定义了以下case类

case class FilterDefinition(filterDefId: String, filter: TileFilter)

case class TileFilter(tiles: Seq[Long], zoomLevel: Int)

在运行期间,我注意到日志上说

FilterDefinition 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.

如果我正确解释了flink文档,那么flink应该能够序列化scala case类,而不需要kryo。但是,对我来说,上面的case类是kryo序列化程序的后备类。
我没有解释flink是如何处理case类的吗?

rkttyhzu

rkttyhzu1#

此处摘自文档:
如果java和scala类满足以下要求,则它们将被flink视为特殊的pojo数据类型:
类必须是公共的。
它必须有一个没有参数的公共构造函数(默认构造函数)。
所有字段要么是公共的,要么必须通过getter和setter函数进行访问。对于名为foo的字段,getter和setter方法必须命名为getfoo()和setfoo()。
已注册的序列化程序必须支持字段类型。
在本例中,flink似乎不知道如何序列化 TileFilter (或者更具体地说,seq[long])。

相关问题