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