Flink Java与Scala的Api类型不匹配问题

本文介绍了一个使用Apache Flink CEP API进行复杂事件处理的Scala示例,并解释了如何正确导入必要的Scala包来避免类型不匹配错误。
  
由于之前写的程序是Java版本,之后改写Scala版本时候就把import 包直接复制到Scala文件的包上,然后报错:

Java程序引包如下:

import org.apache.flink.api.common.functions.FilterFunction;
import org.apache.flink.cep.CEP;
import org.apache.flink.cep.PatternSelectFunction;
import org.apache.flink.cep.pattern.Pattern;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.windowing.time.Time;

 import org.apache.flink.streaming.api.scala._ //scala拓展API需要导入的

然后编写Scala代码:

object CepApp {

  def main(args: Array[String]) {

    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val input = env.fromElements(new TemperatureEvent("xyz", 22.0))

    val pattern:Pattern[TemperatureEvent,_] = Pattern.begin[TemperatureEvent]("first").subtype(classOf[TemperatureEvent]).where(new FilterFunction[TemperatureEvent] {
      override def filter(value: TemperatureEvent): Boolean = {
        if (value.temperature >= 26.0) true else false

      }
    }).within(Time.seconds(10))


    val patternStream: DataStream[Alert] = CEP.pattern[TemperatureEvent](input, pattern).select(new PatternSelectFunction[TemperatureEvent, Alert] {
      override def select(pattern: util.Map[String, TemperatureEvent]): Alert = {

        new Alert("Temperature Rise Detected ...")
      }
    })

    patternStream.print()
    env.execute("CEP on Temperature Sensor")

  }

}
然后运行报错:


Error:(40, 74) type mismatch;
 found   : org.apache.flink.streaming.api.scala.DataStream[com.daxin.stream.cep.TemperatureEvent]
 required: org.apache.flink.streaming.api.datastream.DataStream[com.daxin.stream.cep.TemperatureEvent]
    val patternStream: DataStream[Alert] = CEP.pattern[TemperatureEvent](input, pattern).select(new PatternSelectFunction[TemperatureEvent, Alert] {
                                                                         ^
错误信息:需要org.apache.flink.streaming.api.datastream.DataStream类型的实际发现org.apache.flink.streaming.api.datastream.DataStream.

最后排查发现是倒错包,实际上导包为:

import org.apache.flink.api.common.functions.FilterFunction
import org.apache.flink.cep.PatternSelectFunction
import org.apache.flink.cep.scala.CEP
import org.apache.flink.cep.scala.pattern.Pattern
import org.apache.flink.streaming.api.windowing.time.Time
import org.apache.flink.streaming.api.scala._

即可正确执行!


所以当发现scala包下类型与非scala包下同名类型变量类型不兼容时候,一般就是导包问题!









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javartisan

对您有帮助,欢迎老板赐一杯奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值