Группа Scala Spark согласно изменению значения - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть следующий набор данных: -

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 в массиве, но этот подход не распространяется на кластер.Любые предложения, пожалуйста.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете просто группировать таким образом и достигать желаемых результатов.

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|
+---+------+-----+-------------------+-------------------+
...