Spark:基于周期时间对数据流进行分组

时间:2016-07-21 06:23:44

标签: apache-spark spark-streaming binning

我需要您根据周期时间在火花流中对数据流进行分组的输入。

我们正在接收此格式的{Object_id:"vm123", time:"1469077478" , metric :"cpu.usage" , value :"50.8"}输入数据。

数据帧以10秒的平均速率非常快速地被摄取。我们有一个用例来根据周期时间创建数据箱。

假设Spark bin /批处理时间为1分钟,用于处理数据。周期时间应基于消息时间戳。例如,如果我们在上午11:30收到第一个数据包,那么我们必须汇总在上午11:30到上午11:31(1分钟)之间收到的所有指标的消息,然后将其发送到周期时间11.31am进行处理。 / p>

根据Spark文档,我们只支持基于修复批处理持续时间来分组数据,例如,如果我们将批处理持续时间定义为1分钟,它将保留数据1分钟并将其作为批处理发送,我们可以选择在这一分钟的持续时间内汇总收到的数据。但是这种方法不遵循基于如上定义的循环时间聚合数据的概念。

如果我们有办法通过Spark或其他工具实现上述用例,请告诉我们。

已添加详细信息:: 在我们的使用案例中,对于不同的实体,数据帧每10秒被摄取一次,每个对象的指标很少。我们需要在处理之前根据周期时间间隔(如5分钟)创建数据箱,并且该间隔的开始时间应该是从消息时间戳开始。 例如: 我们在kafka队列中有一个对象'vm123'的消息,如下所示: message1 = {Object_id:“vm123”,时间:“t1”,度量:“m1”,值:“50.8”}。 message2 = {Object_id:“vm123”,时间:“t1”,公制:“m2”,值:“55.8”} ....................... ....................................... 循环时间间隔= 5分钟。 所以实体'VM123'的第一个bin应该包含范围为t1到(t1 + 5 * 60)次的所有消息,而ob1的5分钟循环时间的最后一组消息应该如下: {Object_id:“ob1”,时间:“t5”,指标:[{“name”:“m1”,值:“(v1,v2,v3,v4,v5)的平均值},{”name“:”m2 “,值:”平均值(v1,v2,v3,v4,v5)}“]}

谢谢

0 个答案:

没有答案