通过范围触发SQL组数据并触发警报

时间:2019-04-28 07:25:33

标签: pyspark apache-spark-sql spark-streaming

我正在使用带有pyspark的结构化流处理来自Kafka的数据流。如果读数异常,我想以avro格式将警报发布到Kafka

source  temperature timestamp
1001    21  4/28/2019 10:25
1001    22  4/28/2019 10:26
1001    23  4/28/2019 10:27
1001    24  4/28/2019 10:28
1001    25  4/28/2019 10:29
1001    34  4/28/2019 10:30
1001    37  4/28/2019 10:31
1001    36  4/28/2019 10:32
1001    38  4/28/2019 10:33
1001    40  4/28/2019 10:34
1001    41  4/28/2019 10:35
1001    42  4/28/2019 10:36
1001    45  4/28/2019 10:37
1001    47  4/28/2019 10:38
1001    50  4/28/2019 10:39
1001    41  4/28/2019 10:40
1001    42  4/28/2019 10:41
1001    45  4/28/2019 10:42
1001    47  4/28/2019 10:43
1001    50  4/28/2019 10:44

Transform 
source  range   count   alert
1001    21-25   5   HIGH
1001    26-30   5   MEDIUM
1001    40-45   5   MEDIUM
1001    45-50   5   HIGH

我定义了一个滑动20秒和1秒的窗口函数。我能够使用简单的where条件发布警报,但是如果任何警报优先级的计数为20(窗口中的所有记录都具有任何优先级HIGH-> count( 20)等。有人可以建议如何做吗?

我还可以使用json格式发布数据,但不能使用AVRO生成数据。 Scala和Java具有to_avro()函数,但pyspark没有任何函数。

感谢您的回应

1 个答案:

答案 0 :(得分:0)

我可以使用Spark中的ml库中的Bucketizer功能转换解决此问题。

How to bin in PySpark?