Есть ли в любом случае, чтобы увидеть, если время в интервале? - PullRequest
0 голосов
/ 15 апреля 2019

Я работаю с pyspark, и у меня есть несколько дат с типом STRING, например:

DATE 
2019-03-01 18:04:42 
2019-02-01 18:34:44 
2019-04-01 19:04:43

Мне нужно знать, если записи между 7 и 19, это не имеет значения, день,Есть ли способ сделать это?

Я хотел бы иметь что-то вроде

DATE                 |TIME 
2019-03-01 18:04:42  | day 
2019-02-01 18:34:44  | day
2019-04-01 19:04:43  | night

1 Ответ

1 голос
/ 16 апреля 2019
from pyspark.sql.functions import from_unixtime, unix_timestamp, when
df = sqlContext.createDataFrame([('2019-03-01 18:04:42',),('2019-02-01 18:34:44',),('2019-04-01 19:04:43',)],('DATE',))
df.show()
+-------------------+ 
|               DATE| 
+-------------------+ 
|2019-03-01 18:04:42| 
|2019-02-01 18:34:44| 
|2019-04-01 19:04:43| 
+-------------------+

Преобразование string в timestamp с использованием функции unix_timestamp и после преобразования можно извлечь часть hour с помощью функции from_unixtime с помощьюуказание шаблона 'HH'.

df = df.withColumn('hour', from_unixtime(unix_timestamp(df['date'], 'yyyy-MM-dd HH:mm:ss'), 'HH'))
df.show()
+-------------------+----+ 
|               DATE|hour| 
+-------------------+----+ 
|2019-03-01 18:04:42|  18| 
|2019-02-01 18:34:44|  18| 
|2019-04-01 19:04:43|  19| 
+-------------------+----+

Наконец, просто используйте функцию when, которая является псевдонимом предложения if-else, чтобы получить день / ночь.

df = df.withColumn('TIME',when(((col('hour') >= 7) & (col('hour')< 19)),'day').otherwise('night')).drop('hour')
df.show()
+-------------------+-----+ 
|               DATE| TIME| 
+-------------------+-----+ 
|2019-03-01 18:04:42|  day| 
|2019-02-01 18:34:44|  day| 
|2019-04-01 19:04:43|night| 
+-------------------+-----+
...