PySpark: приведение строки как метки времени дает неправильное время - PullRequest
1 голос
/ 30 марта 2020

Я использую следующий код для приведения строки типа time timstm_hm к отметке времени timstm_hm_timestamp. Вот код.

from pyspark.sql.functions import col, unix_timestamp
df = df.withColumn('timstm_hm_timestamp', unix_timestamp(col('timstm_hm'), "yyyy-mm-dd HH:mm").cast("timestamp"))

Вот результаты.

-------------------------------------------------
|   timstm_hm         |   timstm_hm_timestamp   |  
-------------------------------------------------
|2018-02-08 11:04     | 2018-01-08 11:04:00     | 
-------------------------------------------------
|2018-02-27 20:34     | 2018-01-27 20:34:00     | 
-------------------------------------------------
|2018-02-23 19:47     | 2018-01-23 19:47:00     | 
-------------------------------------------------

Почему разница между конверсиями составляет один месяц? Это очень странно, так как работает в январе месяце, но не с февраля.

1 Ответ

0 голосов
/ 30 марта 2020

Вам просто нужно заменить mm заглавными буквами MM.

Подробнее см. В формате даты java: Javasimpledate

from pyspark.sql.functions import col, unix_timestamp
df.withColumn('timstm_hm_timestamp', unix_timestamp(col('timstm_hm'), "yyyy-MM-dd HH:mm").cast("timestamp")).show()

+----------------+-------------------+
|       timstm_hm|timstm_hm_timestamp|
+----------------+-------------------+
|2018-02-08 11:04|2018-02-08 11:04:00|
+----------------+-------------------+

Кроме того, вы можете добиться того же результата, используя просто to_timestamp с прописной MM.

from pyspark.sql.functions import to_timestamp
df.withColumn("timestm_hm_timestamp", to_timestamp("timstm_hm","yyyy-MM-dd HH:mm" )).show()

+----------------+--------------------+
|       timstm_hm|timestm_hm_timestamp|
+----------------+--------------------+
|2018-02-08 11:04| 2018-02-08 11:04:00|
+----------------+--------------------+
...