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