使用greedy

val env = StreamExecutionEnvironment.getExecutionEnvironment

val input = env.fromElements("a", "aa", "aaa","bbb","ccc","cc")
val pattern = Pattern.begin[String]("a-label").where(s => s.startsWith("a")).oneOrMore.next("b-label").where(s => s.length==3).oneOrMore.greedy.next("c-label").where(s=> s.startsWith("c"))val patternStream = CEP.pattern(input, pattern)patternStream.select(map=>{val a = map.get("a-label").getval b = map.get("b-label").getval c = map.get("c-label").gets"$a-$b-$c"
}).print()

env.execute()

结果:

7> Buffer(aaa) - Buffer(bbb, ccc)-Buffer(cc)
4> Buffer(a, aa) - Buffer(aaa, bbb, ccc)-Buffer(cc)
6> Buffer(aa) - Buffer(aaa, bbb, ccc)-Buffer(cc)
5> Buffer(aa, aaa) - Buffer(bbb, ccc)-Buffer(cc)
3> Buffer(a, aa, aaa) - Buffer(bbb, ccc)-Buffer(cc)

--------------------------------------------------------------------------------------------------------------------------------

不使用greedy:

val env = StreamExecutionEnvironment.getExecutionEnvironmentimport org.apache.flink.streaming.api.scala._
val input = env.fromElements("a", "aa", "aaa","bbb","ccc","cc")// pattern为a+(greedy)b
val pattern = Pattern.begin[String]("a-label").where(s => s.startsWith("a")).oneOrMore.next("b-label").where(s => s.length==3).oneOrMore.next("c-label").where(s=> s.startsWith("c"))val patternStream = CEP.pattern(input, pattern)patternStream.select(map=>{val a = map.get("a-label").getval b = map.get("b-label").getval c = map.get("c-label").gets"$a-$b-$c"
}).print()env.execute()

结果:

3> Buffer(aaa)-Buffer(bbb)-Buffer(ccc)
5> Buffer(a, aa)-Buffer(aaa, bbb, ccc)-Buffer(cc)
6> Buffer(aa, aaa)-Buffer(bbb, ccc)-Buffer(cc)
8> Buffer(aaa)-Buffer(bbb, ccc)-Buffer(cc)
11> Buffer(a, aa, aaa)-Buffer(bbb)-Buffer(ccc)
1> Buffer(aa, aaa)-Buffer(bbb)-Buffer(ccc)
2> Buffer(aa)-Buffer(aaa, bbb)-Buffer(ccc)
12> Buffer(a, aa)-Buffer(aaa, bbb)-Buffer(ccc)
7> Buffer(aa)-Buffer(aaa, bbb, ccc)-Buffer(cc)
4> Buffer(a, aa, aaa)-Buffer(bbb, ccc)-Buffer(cc)

--------------------------------------------------------------------------------------------------------------------------------

结论:

b-label使用贪婪模式时,元素ccc既满足b-label条件,也满足c-label条件,此时,ccc会被贪婪的处理成满足b的条件;b-label不使用贪婪模式时,ccc既可以当成b-label的元素,也可以当成c-label的元素,所以最后匹配的结果比使用贪婪模式会多。同时,从结果上看,b-label上的greedy不会作用到a-label上。

Flink CEP greedy理解相关推荐

  1. 【Flink】基于 Flink CEP 实时计算商品订单流失量

    1.概述 转载:https://blog.csdn.net/tzs_1041218129/article/details/108786597 假设有个需求需要实时计算商品的订单流失量,规则如下: 用户 ...

  2. 一文学会 Flink CEP(以直播平台监控用户弹幕为例)

    我们在看直播的时候,不管对于主播还是用户来说,非常重要的一项就是弹幕文化.为了增加直播趣味性和互动性, 各大网络直播平台纷纷采用弹窗弹幕作为用户实时交流的方式,内容丰富且形式多样的弹幕数据中隐含着复杂 ...

  3. 大数据计算引擎之Flink Flink CEP复杂事件编程

    原文地址:大数据计算引擎之Flink Flink CEP复杂事件编程 复杂事件编程(CEP)是一种基于流处理的技术,将系统数据看作不同类型的事件,通过分析事件之间的关系,建立不同的时事件系序列库,并利 ...

  4. Apache Flink CEP 实战

    本文根据Apache Flink 实战&进阶篇系列直播课程整理而成,由哈啰出行大数据实时平台资深开发刘博分享.通过一些简单的实际例子,从概念原理,到如何使用,再到功能的扩展,希望能够给打算使用 ...

  5. 从滴滴的Flink CEP引擎说起

    从滴滴的Flink CEP引擎说起 本文转载自 https://www.cnblogs.com/cx2016/p/11647110.html. CEP业务场景 复杂事件处理(Complex Event ...

  6. Flink CEP在哈啰出行的应用

    来源:ververica.cn 作者:刘博·哈啰出行 By 大数据技术与架构 场景描述:Flink CEP 是 Flink 的复杂处理库.它允许用户快速检测无尽数据流中的复杂模式.不过 Flink C ...

  7. Flink: CEP详解

    本文根据 Apache Flink 系列直播课程整理而成,由哈啰出行大数据实时平台资深开发刘博分享.通过一些简单的实际例子,从概念原理,到如何使用,再到功能的扩展,希望能够给计划使用或者已经使用的同学 ...

  8. flink CEP之规则解释

    flink CEP表示复杂事件处理. CEP开发流程: 输入事件流的创建即DataStream pattern的定义即规则定义 通过pattern规则去事件流匹配 选取结果 pattern 1.规则定 ...

  9. Flink CEP编程

    一.FlinkCEP介绍 FlinkCEP(Complex event processing for Flink) 是在Flink实现的复杂事件处理库. 它可以让你在无界流中检测出特定的数据,有机会掌 ...

  10. flink cep demo

    Flink CEP 是 Flink 的复杂处理库.它允许用户快速检测无尽数据流中的复杂模式.不过 Flink CEP 仅可用于通过 DataStream API处理. 参考细说Flink CEP,我们 ...

最新文章

  1. refreshcontrol 实现下拉刷新的功能
  2. python数据模型的意义_Python 数据模型
  3. python开发安卓程序-python可以编写android程序吗?
  4. 红黑树和平衡二叉树的区别_一文搞懂红黑树
  5. win7屏保时间设置_论如何优雅的设置手机和电脑时间屏保!
  6. win32获取当前运行程序的内存地址_一个lock锁,就可以分出程序员对问题处置方式水平的高中低...
  7. 大二物竞金牌转北大计算机,物理竞赛保送去北大还是清华?
  8. clickhouse kafka引擎入门
  9. laravel composer 安装指定版本以及基本的配置
  10. 【Storm入门指南】第六章 真实示例
  11. CCAA 信息安全管理体系 考试大纲及重点题目记忆
  12. python确定样本量(总体比例)
  13. 程序员应该每年更新自己的简历
  14. 第四章、Zigbee模块的设置及组网
  15. 电脑技巧2——调出控制面板(桌面控制面板)
  16. Problem H. Curious (莫比乌斯反演)
  17. vue-element-admin/template+tornado(pyrestful)前后端分离框架实践(1)——自定义菜单和仪表盘
  18. 我的人格类型是:ESTP(外向,感觉,思维,知觉)
  19. Unity 灯光设置——灯光类型
  20. 快速入池淘宝猜你喜欢方法技巧

热门文章

  1. hiberfil.sys文件删除
  2. hosts文件位置以及如何修改hosts文件【Windows】【以github为例】
  3. 我叫mt4公会攻城战服务器维护中,公会攻城战也要讲战术《我叫MT4》攻城战策略解析...
  4. Android 手机实现网络嗅探发现周围设备(类似悟空遥控器)
  5. 18 个 JavaScript 入门技巧
  6. C++代码静态分析与优化(10)_rats
  7. 拆弹实验-phase_1
  8. Your brain expands and shrinks over time — these charts show how
  9. 《你的降落伞是什么颜色》书摘
  10. 一行 Python 能实现什么丧心病狂的功能?