我在下面给出了我的问题的缩影版
我有2个不同的传感器发送1/0值作为流。我能够使用Kafka消耗流并将其带入处理的火花。请注意我在下面给出的示例流。
时间--------------> 1 2 3 4 5 6 7 8 9 10
传感器名称 - > A A B B B B A B A A
传感器值---> 1 0 1 0 1 0 0 1 1 0
我想识别此流中出现的子序列模式。例如,如果A = 0并且流中的下一个值(基于时间)是B = 1,那么我想要发送警报。在上面的示例中,我突出显示了两个地方 - 我想要发出警报。一般来说,它会像
“如果在一个时间间隔内发生一组传感器 - 事件组合, 提醒警报“。
我是新手,不知道斯卡拉。我目前正在使用python进行编码。
我的实际问题包含更多传感器,每个传感器可以有不同的值组合。意思是我的子序列和事件流
我已经尝试过几个选项而没有成功
答案 0 :(得分:0)
任何想解决这个问题的人都可以使用我的解决方案:
1- 为了让他们保持联系,您需要使用 collect_list 收集事件。
2- 最好在 collect_list 上对您的事件进行排序,但要小心,因为它按第一列排列数据,因此将 DateTime 放在该列中很重要。
3- 例如,我从 collect_list 中删除了 DateTime。
4- 最后,您应该联系所有元素以使用字符串函数(如包含以查找您的子序列)来探索它。
.agg(expr("array_join(TRANSFORM(array_sort(collect_list((Time , Sensor Value))), a -> a.Time ),'')")as "MySequence")
在这个 agg 函数之后,您可以使用任何正则表达式或字符串函数来检测您的模式。
查看此链接以获取有关 collect_list 的更多信息: collect list 检查此链接以获取有关对 collect_list 进行排序的更多信息: sort a collect list