Apache spark ApacheSpark-如何在事件时间使用窗口操作设计自己的聚合
我想计算一下供求比。使用“时间到提取”、“时间到提取”、“提取位置”、“提取位置”字段重新编码数据 2019-01-01 00:22:212019-01-01 00:43:43,苏豪区联合广场 我将把记录拆分为两个记录,以便数据如下所示: 2019-01-01 00:22:21,联合广场,皮克 2019-01-01 00:43:43,索霍区,降落区 2019-01-01 00:22:23,联合广场,落差 比率=(拾取+放下)/拾取=2/1=2 (因为下降意味着汽车可用,所以供应数量增加了一。 ;拾取的记录将同时影响需求和供应 )我想在每5分钟一小时内报告比率Apache spark ApacheSpark-如何在事件时间使用窗口操作设计自己的聚合,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,我想计算一下供求比。使用“时间到提取”、“时间到提取”、“提取位置”、“提取位置”字段重新编码数据 2019-01-01 00:22:212019-01-01 00:43:43,苏豪区联合广场 我将把记录拆分为两个记录,以便数据如下所示: 2019-01-01 00:22:21,联合广场,皮克 2019-01-01 00:43:43,索霍区,降落区 2019-01-01 00:22:23,联合广场,落差 比率=(拾取+放下)/拾取=2/1=2 (因为下降意味着汽车可用,所以供应数量增加了一。
val perMinCount = ds.filter(col("zone")== "Union Sq").withWatermark("datetime", "10 minutes")
.groupBy($"zone",window($"datetime", "1 hours","5 minutes")).agg(?)
这就是我目前所做的。如何实现它?您也可以在不编写自定义聚合的情况下解决此问题。 您可以使用when或groupBy、agg来实现这一点。 e、 g 在本例中,我将窗口的总持续时间设为“10分钟”,您可以在案例中使用“1小时”
//streaming df
+-------------------+--------+-----+
|datetime |zone |event|
+-------------------+--------+-----+
|2019-11-06 11:32:21|Union Sq|PICK |
|2019-11-06 11:32:22|SoHo |DROP |
|2019-11-06 11:32:23|Union Sq|DROP |
+-------------------+--------+-----+
val enrichedStreamingDf = streamingDf
.withColumn("demand",
when(col("event") === "PICK", lit(1))
.when(col("event") === "DROP", lit(0))
.otherwise(lit(0)))
.withColumn("supply",
when(col("event") === "PICK", lit(1))
.when(col("event") === "DROP", lit(1))
.otherwise(lit(0)))
.filter(col("zone") === "Union Sq")
//enriched streaming df
+-------------------+--------+-----+------+------+
|datetime |zone |event|demand|supply|
+-------------------+--------+-----+------+------+
|2019-11-06 11:32:21|Union Sq|PICK |1 |1 |
|2019-11-06 11:32:23|Union Sq|DROP |0 |1 |
+-------------------+--------+-----+------+------+
val ratioDf = enrichedStreamingDf
.withWatermark("datetime", "10 minutes")
.groupBy(
window($"datetime", "10 minutes", "5 minutes"),
$"zone"
)
.agg((sum($"supply") / sum($"demand")).as("sup_dem_ratio"))
//supply to demand ratio streaming df
+------------------------------------------+--------+-------------+
|window |zone |sup_dem_ratio|
+------------------------------------------+--------+-------------+
|[2019-11-06 11:25:00, 2019-11-06 11:35:00]|Union Sq|2.0 |
|[2019-11-06 11:30:00, 2019-11-06 11:40:00]|Union Sq|2.0 |
+------------------------------------------+--------+-------------+