分别对CEP进行分类或GroupBy数据流数据处理

时间:2017-01-03 06:54:34

标签: apache-flink complex-event-processing data-stream

假设我有一个数据流

x:1, y:2 , z:3 , x:7 , y:-1, z:0, z:3 , z:2, y:3 ,x: 2 ,y:6

如何将x,y,z放在自己的存储桶中并对其应用我的CEP规则。

x:1, x:7,x: 2 
y:2, y:-1, y:3 , y:6
z:3, z:0 , z:3, z:2

或以其他方式表达。如何将流拆分为这些类别(每个x,y,z一个流)。我会得到3个子流,它们有自己的CEP处理。

这里的挑战是,x,y,z不是预先定义的。所以我不能预先创建流并使用if或switch语句进行分配。

修改 该模式将是,“如果x值在过去10分钟内介于0 - 8之间

1 个答案:

答案 0 :(得分:0)

这是通过在类别属性上“键入”流来完成的。

如果您有DataStream[(String, Int)],则会出现以下情况:

val yourStream: DataStream[(String, Int)] = ???
val yourPattern: Pattern = ???

// key by String attribute
val keyedStream = yourStream.keyBy(_._1) 
// apply pattern on keyed stream 
val patternStream: PatternStream = CEP.pattern(keyedStream, yourPattern)

将针对键控属性的每个不同值评估模式。