Вкл. Scala может быть выполнено с группированием и заменой «чтения» значений на ноль, где число больше одного:
val df = Seq(
(1, 13015, "2018-03-22 08:00:00.000"),
(1, 14550, "2018-03-22 09:00:00.000"),
(1, 14570, "2018-03-22 09:00:00.000"),
(2, 15700, "2018-03-22 08:00:00.000"),
(2, 16700, "2018-03-22 09:00:00.000"),
(2, 18000, "2018-03-22 10:00:00.000")
).toDF("id", "reading", "timestamp")
// action
df
.groupBy("id", "timestamp")
.agg(
min("reading").alias("reading"),
count("reading").alias("readingCount")
)
.withColumn("reading", when($"readingCount" > 1, null).otherwise($"reading"))
.drop("readingCount")
Вывод:
+---+-----------------------+-------+
|id |timestamp |reading|
+---+-----------------------+-------+
|2 |2018-03-22 09:00:00.000|16700 |
|1 |2018-03-22 08:00:00.000|13015 |
|1 |2018-03-22 09:00:00.000|null |
|2 |2018-03-22 10:00:00.000|18000 |
|2 |2018-03-22 08:00:00.000|15700 |
+---+-----------------------+-------+
Угадай , можно легко перевести в Python.