代碼node
class TimeoutStateFunction extends ProcessFunction[ObjectNode, (String, Long)] { lazy val state : ListState[CountWithTimestamp] = getRuntimeContext .getListState(new ListStateDescriptor[CountWithTimestamp]("myState", classOf[CountWithTimestamp])) override def processElement(value: ObjectNode, ctx: Context, out: Collector[(String, Long)]): Unit = { //Stuff here } override def onTimer(timestamp: Long, ctx: OnTimerContext, out: Collector[(String, Long)]): Unit = { //More Stuff here } }
錯誤:apache
Error:(8, 7) class TimeoutStateFunction needs to be abstract, since method processElement in class ProcessFunction of type (x$1: com.fasterxml.jackson.databind.node.ObjectNode, x$2: org.apache.flink.streaming.api.functions.ProcessFunction[com.fasterxml.jackson.databind.node.ObjectNode,(String, Long)]#Context, x$3: org.apache.flink.util.Collector[(String, Long)])Unit is not defined class TimeoutStateFunction extends ProcessFunction[ObjectNode, (String, Long)] { Error:(17, 18) method processElement overrides nothing. Note: the super classes of class TimeoutStateFunction contain the following, non final members named processElement: def processElement(x$1: com.fasterxml.jackson.databind.node.ObjectNode,x$2: org.apache.flink.streaming.api.functions.ProcessFunction[com.fasterxml.jackson.databind.node.ObjectNode,(String, Long)]#Context,x$3: org.apache.flink.util.Collector[(String, Long)]): Unit override def processElement(value: ObjectNode, ctx: Context, out: Collector[(String, Long)]): Unit = { Error:(36, 16) method onTimer overrides nothing. Note: the super classes of class TimeoutStateFunction contain the following, non final members named onTimer: def onTimer(x$1: Long,x$2: org.apache.flink.streaming.api.functions.ProcessFunction[com.fasterxml.jackson.databind.node.ObjectNode,(String, Long)]#OnTimerContext,x$3: org.apache.flink.util.Collector[(String, Long)]): Unit override def onTimer(timestamp: Long, ctx: OnTimerContext, out: Collector[(String, Long)]): Unit = {
緣由:api
Context 和 OnTimerContext 要指明爲ProcessFunction內部的ide
解決方法:code
override def processElement( value: ObjectNode, ctx: ProcessFunction[ObjectNode, (String, Long)]#Context, out: Collector[(String, Long)]) : Unit = { //Stuff here } override def onTimer( timestamp: Long, ctx: ProcessFunction[ObjectNode, (String, Long)]#OnTimerContext, out: Collector[(String, Long)]) : Unit = { //More Stuff here }