Spark 2.2 извлечение даты не работает из unix_timestamp - PullRequest
0 голосов
/ 29 июня 2018

В Spark 2.2 извлечение даты не работает из unix_timestamp Входные данные:

+-------------------------+
|UPDATE_TS                |
+-------------------------+
|26NOV2009:03:27:01.154410|
|24DEC2012:00:47:46.805710|
|02MAY2013:00:45:33.233844|
|21NOV2014:00:33:39.350140|
|10DEC2013:00:30:30.532446|

Я попробовал следующие подходы, но выводим их как ноль

Запрос устал:

Spark sql

sqlContext.sql("select from_unixtime(unix_timestamp(UPDATE_TS,'ddMMMyyyy:HH:MM:SS.ssssss'), 'yyyy') as new_date from df_vendor_tab").show()

DSL:

 df_id.withColumn('part_date', from_unixtime(unix_timestamp(df_id.UPDATE_TS, "ddMMMyyyy:HH:MM:SS.sss"), "yyyy"))

ожидаемый результат:

2009
2012
2013
2014
2013

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы используете неверную строку формата. Столица M на месяц. Нижний регистр m для минуты.

Будет работать следующее:

from pyspark.sql.functions import from_unixtime, unix_timestamp, to_date

df_id.withColumn(
    'part_date', 
    from_unixtime(unix_timestamp(df_id.UPDATE_TS, "ddMMMyyyy:HH:mm:SS.SSSSSS"), "yyyy")
).show(truncate=False)
#+-------------------------+---------+
#|UPDATE_TS                |part_date|
#+-------------------------+---------+
#|26NOV2009:03:27:01.154410|2009     |
#|24DEC2012:00:47:46.805710|2012     |
#|02MAY2013:00:45:33.233844|2013     |
#|21NOV2014:00:33:39.350140|2014     |
#|10DEC2013:00:30:30.532446|2013     |
#+-------------------------+---------+
0 голосов
/ 29 июня 2018

Простой spark-sql отлично работает с unix_timestamp и from_unixtime

sqlContext.sql("Select from_unixtime(unix_timestamp('26NOV2009:03:27:01.154410', 'ddMMMyyyy'), 'yyyy')").show

Выход:

+----+
| _c0|
+----+
|2009|
+----+

Так как вы ищете год извлечения, я не учел часы, минуты, секунды ...

...