目前,当我打印CEP模式的结果时,我的行为很奇怪。
数据模型如下:
CEP部分如下所示:
val pattern = Pattern
.begin[VehicleRelated]("before")
.subtype(classOf[Position])
.next("recognize")
.subtype(classOf[Recognize])
.next("after")
.subtype(classOf[Position])
.within(Time.seconds(5))
val patternStream = CEP.pattern(actionEvents, pattern)
val recognitions = patternStream
.select(pattern => {
val s = pattern("recognize").head.asInstanceOf[Recognize]
LOG.debug(s.toString)
s
})
recognitions.print("RECO")
日志的输出如下:
14:45:27,286 DEBUG stoff.schnaps.RecognizingJob$ - Recognize(VehicleId: 2, Id: 601, Pos: 1601, Direction: 35, Add: Map())
RECO:8> Recognize(VehicleId: null, Id: 601, Pos: 1601, Direction: 35, Add: Map())
现在最大的问题是,为什么我返回转换的对象后 vehicleId 属性为null?有什么建议吗?
更新我进行了一些调查,发现PojoSerializer是问题所在。复制函数被调用,并且在第151行this.numFields
上是错误的。.计数仅包括Recognize类本身的属性的计数,而没有继承的类,在这种情况下为Event和VehicleRelated。.属性类型和时间戳也为null。.
答案 0 :(得分:0)
问题是flink内部POJO序列化程序无法正确解析多态。
因此,我将Kyro序列化器设置为默认值:
val config = env.getConfig
config.enableForceKryo()