根据价值变化的 Scala Spark 组
Scala Spark group as per value change
我有以下数据集:-
ID Sensor State DateTime
1 S1 0 2018-09-10 10:10:05
1 S1 0 2018-09-10 10:10:10
1 S1 0 2018-09-10 10:10:20
1 S1 1 2018-09-10 10:10:30
1 S1 1 2018-09-10 10:10:40
1 S1 1 2018-09-10 10:10:50
1 S1 1 2018-09-10 10:10:60
1 S2 0 2018-09-10 10:10:10
1 S2 0 2018-09-10 10:10:20
1 S2 0 2018-09-10 10:10:30
1 S2 1 2018-09-10 10:10:40
1 S2 1 2018-09-10 10:10:50
2 S1 0 2018-09-10 10:10:30
2 S1 1 2018-09-10 10:10:40
2 S1 1 2018-09-10 10:10:50
需要输出
ID Sensor State MinDT MaxDT
1 S1 0 2018-09-10 10:10:05 2018-09-10 10:10:20
1 S1 1 2018-09-10 10:10:30 2018-09-10 10:10:60
1 S2 0 2018-09-10 10:10:10 2018-09-10 10:10:30
1 S2 1 2018-09-10 10:10:40 2018-09-10 10:10:50
2 S1 0 2018-09-10 10:10:30 2018-09-10 10:10:30
2 S1 1 2018-09-10 10:10:40 2018-09-10 10:10:50
我想根据传感器变化值进行分组,当值发生变化时我将需要范围。请任何帮助。我尝试了一种简单的方法,即初始化变量中的值,然后遍历每一行以检查值的变化并将 ResultSet 存储在数组中,但这种方法并未分布在集群上。有什么建议吗
这样分组就可以了,达到你想要的效果。
df.groupBy("ID", "Sensor", "State")
.agg(
date_format(max(to_timestamp($"DateTime", "yyyy-MM-dd HH:mm:ss")), "yyyy-MM-dd HH:mm:ss").alias("MaxDT"),
date_format(min(to_timestamp($"DateTime", "yyyy-MM-dd HH:mm:ss")), "yyyy-MM-dd HH:mm:ss").alias("MinDT"))
.show()
输出:
+---+------+-----+-------------------+-------------------+
| ID|Sensor|State| MaxDT| MinDT|
+---+------+-----+-------------------+-------------------+
| 2| S1| 0|2018-09-10 10:10:30|2018-09-10 10:10:30|
| 1| S2| 1|2018-09-10 10:10:50|2018-09-10 10:10:40|
| 2| S1| 1|2018-09-10 10:10:50|2018-09-10 10:10:40|
| 1| S1| 0|2018-09-10 10:10:20|2018-09-10 10:10:05|
| 1| S2| 0|2018-09-10 10:10:30|2018-09-10 10:10:10|
| 1| S1| 1|2018-09-10 10:10:50|2018-09-10 10:10:30|
+---+------+-----+-------------------+-------------------+
我有以下数据集:-
ID Sensor State DateTime
1 S1 0 2018-09-10 10:10:05
1 S1 0 2018-09-10 10:10:10
1 S1 0 2018-09-10 10:10:20
1 S1 1 2018-09-10 10:10:30
1 S1 1 2018-09-10 10:10:40
1 S1 1 2018-09-10 10:10:50
1 S1 1 2018-09-10 10:10:60
1 S2 0 2018-09-10 10:10:10
1 S2 0 2018-09-10 10:10:20
1 S2 0 2018-09-10 10:10:30
1 S2 1 2018-09-10 10:10:40
1 S2 1 2018-09-10 10:10:50
2 S1 0 2018-09-10 10:10:30
2 S1 1 2018-09-10 10:10:40
2 S1 1 2018-09-10 10:10:50
需要输出
ID Sensor State MinDT MaxDT
1 S1 0 2018-09-10 10:10:05 2018-09-10 10:10:20
1 S1 1 2018-09-10 10:10:30 2018-09-10 10:10:60
1 S2 0 2018-09-10 10:10:10 2018-09-10 10:10:30
1 S2 1 2018-09-10 10:10:40 2018-09-10 10:10:50
2 S1 0 2018-09-10 10:10:30 2018-09-10 10:10:30
2 S1 1 2018-09-10 10:10:40 2018-09-10 10:10:50
我想根据传感器变化值进行分组,当值发生变化时我将需要范围。请任何帮助。我尝试了一种简单的方法,即初始化变量中的值,然后遍历每一行以检查值的变化并将 ResultSet 存储在数组中,但这种方法并未分布在集群上。有什么建议吗
这样分组就可以了,达到你想要的效果。
df.groupBy("ID", "Sensor", "State")
.agg(
date_format(max(to_timestamp($"DateTime", "yyyy-MM-dd HH:mm:ss")), "yyyy-MM-dd HH:mm:ss").alias("MaxDT"),
date_format(min(to_timestamp($"DateTime", "yyyy-MM-dd HH:mm:ss")), "yyyy-MM-dd HH:mm:ss").alias("MinDT"))
.show()
输出:
+---+------+-----+-------------------+-------------------+
| ID|Sensor|State| MaxDT| MinDT|
+---+------+-----+-------------------+-------------------+
| 2| S1| 0|2018-09-10 10:10:30|2018-09-10 10:10:30|
| 1| S2| 1|2018-09-10 10:10:50|2018-09-10 10:10:40|
| 2| S1| 1|2018-09-10 10:10:50|2018-09-10 10:10:40|
| 1| S1| 0|2018-09-10 10:10:20|2018-09-10 10:10:05|
| 1| S2| 0|2018-09-10 10:10:30|2018-09-10 10:10:10|
| 1| S1| 1|2018-09-10 10:10:50|2018-09-10 10:10:30|
+---+------+-----+-------------------+-------------------+