Ваше состояние может быть упрощено до проверки, находится ли часовая часть вашего столбца time
между 16
и 23
.
Вы можете получить час, используя pyspark.sql.functions.split
, чтобы разбить столбец time
на символ :
. Извлеките токен с индексом 0, чтобы получить час, и проведите сравнение, используя pyspark.sql.Column.between()
(включая границы).
from pyspark.sql.functions import split
df.where(split("time", ":")[0].between(16, 23)).show()
#+--------+
#| time|
#+--------+
#|22:20:54|
#|21:46:07|
#+--------+
Обратите внимание, что даже если split
возвращает строку, существует неявное преобразование в int
для сравнения between
.
Конечно, это можно расширить, если у вас есть более сложные критерии фильтрации, которые также включают просмотр минут или секунд:
df.select(
"*",
split("time", ":")[0].cast("int").alias("hour"),
split("time", ":")[1].cast("int").alias("minute"),
split("time", ":")[2].cast("int").alias("second")
).show()
#+--------+----+------+------+
#| time|hour|minute|second|
#+--------+----+------+------+
#|08:28:24| 8| 28| 24|
#|22:20:54| 22| 20| 54|
#|12:59:38| 12| 59| 38|
#|21:46:07| 21| 46| 7|
#+--------+----+------+------+