Что будет лучшим способом решить проблему с помощью Apache Spark?
Мой набор данных выглядит следующим образом-
ID, DATE, TIME, VALUE
001,2019-01-01, 0010, 150
001,2019-01-01, 0020, 150
001,2019-01-01, 0030, 160
001,2019-01-01, 0040, 160
001,2019-01-01, 0050, 150
002,2019-01-01, 0010, 151
002,2019-01-01, 0020, 151
002,2019-01-01, 0030, 161
002,2019-01-01, 0040, 162
002,2019-01-01, 0051, 152
Мне нужно держать строки, когда «значение» было изменено для каждого идентификатора.
Мой ожидаемый результат
ID, DATE, TIME, VALUE
001,2019-01-01, 0010, 150
001,2019-01-01, 0030, 160
001,2019-01-01, 0050, 150
002,2019-01-01, 0010, 151
002,2019-01-01, 0030, 161
002,2019-01-01, 0040, 162
002,2019-01-01, 0051, 152
1
Rana
29 Сен 2019 в 13:48
1 ответ
Лучший ответ
Вы можете использовать lag
функцию с окном:
val df = Seq(
("001", "2019-01-01", "0010", "150"),
("001", "2019-01-01", "0020", "150"),
("001", "2019-01-01", "0030", "160"),
("001", "2019-01-01", "0040", "160"),
("001", "2019-01-01", "0050", "150"),
("002", "2019-01-01", "0010", "151"),
("002", "2019-01-01", "0020", "151"),
("002", "2019-01-01", "0030", "161"),
("002", "2019-01-01", "0040", "162"),
("002", "2019-01-01", "0051", "152")
).toDF("ID", "DATE", "TIME", "VALUE")
df
.withColumn("change",coalesce($"VALUE"=!=lag($"VALUE",1).over(Window.partitionBy($"ID").orderBy($"TIME")),lit(true)))
.where($"change")
//.drop($"change")
.show()
Дает:
+---+----------+----+-----+------+
| ID| DATE|TIME|VALUE|change|
+---+----------+----+-----+------+
|001|2019-01-01|0010| 150| true|
|001|2019-01-01|0030| 160| true|
|001|2019-01-01|0050| 150| true|
|002|2019-01-01|0010| 151| true|
|002|2019-01-01|0030| 161| true|
|002|2019-01-01|0040| 162| true|
|002|2019-01-01|0051| 152| true|
+---+----------+----+-----+------+
2
Raphael Roth
29 Сен 2019 в 11:35
Похожие вопросы
Новые вопросы
apache-spark
Apache Spark - это механизм распределенной обработки данных с открытым исходным кодом, написанный на Scala, предоставляющий пользователям унифицированный API и распределенные наборы данных как для пакетной, так и для потоковой обработки. Примеры использования Apache Spark часто связаны с машинным / глубоким обучением, обработкой графиков.