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

CEP示例的简单Scala API不显示任何输出

方昊阳
2023-03-14

我正在编写一个简单的示例来测试Flink中CEP的新Scala API,使用最新的Github版本1.1-SNAPSHOT。

Pattern只是一个值的检查,并为每个匹配的模式输出一个字符串作为结果。代码如下:

val pattern : Pattern[(String, Long, Int), _] = Pattern.begin("start").where(_._3 < 4)

val cepEventAlert = CEP.pattern(streamingAlert, pattern)

def selectFn(pattern : mutable.Map[String, (String, Long, Int)]): String = {
    val startEvent = pattern.get("start").get
    "Alerta:"+startEvent._1+": Pattern"
}

val patternStreamSelected = cepEventAlert.select(selectFn(_))

patternStreamSelected.print()

它在1.1-SNAPSHOT下编译和运行,没有问题,但jobmanager输出没有显示该print()的迹象。即使放松模式条件,只设置“开始”(接受所有事件),也不会返回任何结果。

此外,当尝试添加阶段时,代码无法编译。如果我将模式更改为(查找第三个字段小于4的两个连续事件):

Pattern.begin("start").where(_._3 < 4).next("end").where(_._3 < 4).within(Time.seconds(30))

然后编译器抛出:

error: missing parameter type for expanded function ((x$4) => x$4._3.$less(4))

在“开始”阶段之后的第一个where()上显示错误。我尝试显式设置参数类型:

(x: (String, Long, Int)) => x._3 < 4

这样它会再次编译,但当它在Flink上运行时,不会显示任何输出。StreamingAlert是一个Scala数据流[(String,Long,Int)],在代码的其他部分,我可以使用过滤_


共有1个答案

杜英叡
2023-03-14

流API中的print()API调用不会触发急切执行。您仍然必须在程序结束时调用env.execute()

定义模式时,应该在某处提供事件类型。要么按原样执行,要么通过begin的类型参数执行:

Pattern.begin[(String, Long, Int)]("start").where(_._3 < 4).next("end").where(_._3 < 4).within(Time.seconds(30))
 类似资料:
  • 我读了建筑合成学的入门书和你好三角形章节,并决定加入LWJGL。当我第一次尝试后屏幕上没有任何东西时,我再次尝试从另一个GL 3.x教程移植一些C代码,但无济于事。 据我所知,我把所有部分放在一起,但屏幕仍然是黑色的。我理解这些概念,但我确信我在这里错过了一些简单的东西。 我已经尽可能简单地减少了这个。请注意,以下类使用此着色器帮助程序,并且从我所知道的情况来看,它按预期工作(除了缺少错误检查之外

  • 问题内容: 这个简单的代码在我用来测试的几台机器上没有产生任何声音。我正在Eclipse中运行代码,但我也尝试过使用命令行无济于事。 我可以通过获取音序器,将MIDI事件添加到音序并播放音序来成功获取声音,但是我试图做一些音序器不支持的实时音乐效果。 有任何想法吗? 使用解决方案进行编辑: 事实证明,问题在于,默认情况下,JRE并未附带音库(有趣的是,使用Sequencer起作用了,而使用Synt

  • 我试图用自己的数据创建一个dataTable:代码如下: 但当我运行它时,我看到一张空桌子。我想查看我的数据,我怎么能?

  • 我目前正在使用Firebase_Auth.当我点击登录按钮并且Firebase连接到我的应用程序时,一切似乎都很好。它在终端上显示用户的ID。但是当我去消防基地时。 它无法识别任何已注册的用户。 Ps:问题是当用户注册时,它不会显示给firebase。

  • 问题内容: 我有一些问题让 双方 使用的代码边工作。 基于uinput入门:用户级别输入子系统[死链接;存档 ]我总结了以下 作家 (减去错误处理): 这似乎可行,至少似乎已编写了完整的结构。 然后,我写出了我最能想到的事件的天真的 读者 : 不幸的是,读者方面根本无法工作。每次只能读取8个字节,这几乎不是完整的结构。 我犯了什么愚蠢的错误? 问题答案: 您还应该在实际事件之后编写一个同步事件。在

  • 本文向大家介绍webpack Webpack简单示例,包括了webpack Webpack简单示例的使用技巧和注意事项,需要的朋友参考一下 示例 使用Webpack的最低要求是以下命令: Web pack将获取源文件,编译到输出目标并解决源文件中的所有依赖关系。