当前位置: 首页 > 知识库问答 >
问题:

尝试在PatternStream上选择时“输入不匹配:需要元组类型”

袁鸿达
2023-03-14
val pattern : Pattern[TrafficEvent, _] = Pattern.begin[TrafficEvent]("start")
val patternStream = CEP.pattern(stream.javaStream, pattern);

class MyPatternSelectFunction extends PatternSelectFunction[TrafficEvent, TrafficEvent] {
    override def select(pattern : java.util.Map[String, TrafficEvent]) : TrafficEvent ={
        pattern.get("start")
    }
}
val alerts = patternStream.select(new MyPatternSelectFunction())
  Input mismatch: Tuple type expected.
            org.apache.flink.api.java.typeutils.TypeExtractor.validateInputType(TypeExtractor.java:878)
            org.apache.flink.api.java.typeutils.TypeExtractor.getUnaryOperatorReturnType(TypeExtractor.java:302)
            org.apache.flink.cep.PatternStream.select(PatternStream.java:64)
            com.demo.DemoTraffic$.main(DemoTraffic.scala:311)
public static DataStream<DemoTraffic.trafficEvent>  getStreamByPattern(DataStream<DemoTraffic.trafficEvent> stream) {
  Pattern<DemoTraffic.trafficEvent, ?> pattern = Pattern.<DemoTraffic.trafficEvent>begin("start");
  PatternStream<DemoTraffic.trafficEvent> patternStream = CEP.pattern(stream, pattern);
  DataStream<DemoTraffic.trafficEvent> rvalue = patternStream.select(new PatternSelectFunction<DemoTraffic.trafficEvent, DemoTraffic.trafficEvent>() {
    @Override
    public DemoTraffic.trafficEvent select(Map<String, DemoTraffic.trafficEvent> pattern) throws Exception {
      return pattern.get("start");
    }
  });
  return rvalue;
}

谢谢

共有1个答案

松增
2023-03-14

我假设TrafficEvent是一个Scala case类。CEP库是为Flink的Java API编写的,因此还不支持Scala case类。

作为一种变通方法,您可以将case类转换为普通的Scala类。

还有一个跟踪CEP Scala API开发的JIRA票证。

 类似资料:
  • 我在测试新的Flink 1.0.0功能时遇到了一些问题。我一直在修补CEP,但还没有运行简单的演示代码: 代码编译良好,maven不显示任何警告。TraFFEvent是一个包含几个简单字段的类,stream是该类的Scala DataStream。当代码在Flink上运行时,错误会出现。它运行一秒钟,然后代码退出并显示此错误消息: 该程序以以下例外结束: 我试图通过构建这样一个静态类将功能移到Ja

  • 我对闪身是个新手。我正在尝试使用Flink1.3.2从我们的Kinesis流中读取并将输出写入一个Cassandra表。该程序能够从Kinesis流式传输数据。 提前道谢!

  • 我是ANTLR的新手。我想写一个语法来解析下面的输入: 语法如下:: 当我尝试使用语法解析上述输入时,它会引发以下异常:: 第1行:0不匹配的输入'commit a1b2c3d4',应为'commit' 我已经引用了ANTLR4:不匹配的输入链接,但仍然不清楚发生了什么。

  • 失败:ParseException行1:161输入“>”不匹配,在结构类型HIVE>创建外部表user1(id BIGINT,created_at STRING,source STRING,favorited BOOLEAN,retweet_count INT,retweeted_status struct sreen_name:STRING,name:STRING>>,entities stru

  • 好的,我要学习一个CS安全类,里面有一些基本的java编程,我们的第一个任务是玩。然而,我们也必须“防弹”我们的计划。虽然我的方法不是最理想的,但除了第一次输入外,它仍然有效。如果我为任何

  • 问题内容: 我想匹配一个看起来像这样的字符串: 如果存在lang_tags不包含的文本(在本示例中为),我希望匹配返回true 。也可以将其放置在字符串的开头或结尾。 空格不应匹配,例如不应导致匹配。 我不能使用超前或回溯,因为MySQL似乎不支持此功能。 有什么建议? 问题答案: 试试这个正则表达式: 这是您可以使用的方式: 它应该处理所有情况: 前 后 中间 不是空格