Преобразование столбца из строки в to_date, заполнение другого месяца в pyspark - PullRequest
0 голосов
/ 28 июня 2018

Я использую спарк 1.6.3. При преобразовании столбца val1 (строки типа данных) в дату код заполняет другой месяц в результате, отличном от того, что находится в источнике.

Например, предположим, что мой источник 6/15/2017 18:32. Код ниже выдает 15-1-2017 в результате (обратите внимание, что месяц неверен).

Мой фрагмент кода, как показано ниже

from pyspark.sql.functions import from_unixtime,unix_timestamp ,to_date
df5 = df.withColumn("val1", to_date(from_unixtime(unix_timestamp(("val1"), "mm/dd/yyyy"))))

Ожидаемый результат - 6/15/2017 типа даты. Пожалуйста, предложите.

Ответы [ 2 ]

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

Вы используете неправильный формат даты. Вам нужно использовать MM для месяца (не mm).

Например:

df = sqlCtx.createDataFrame([('6/15/2017 18:32',)], ["val1"])
df.printSchema()
#root
# |-- val1: string (nullable = true)

Как мы видим val1 - это строка. Мы можем конвертировать в дату, используя ваш код с заглавной буквы M:

from pyspark.sql.functions import from_unixtime, unix_timestamp, to_date
df5 = df.withColumn("val1", to_date(from_unixtime(unix_timestamp(("val1"), "MM/dd/yyyy"))))
df5.show()
#+----------+
#|      val1|
#+----------+
#|2017-06-15|
#+----------+

Новый тип date, который будет отображаться как YYYY-MM-DD:

df5.printSchema()
#root
# |-- val1: date (nullable = true)
0 голосов
/ 28 июня 2018

Я думаю, вы можете попробовать это, как показано ниже. Попробуйте разыграть timestamp как datetype

df1 = df.withColumn("val1", from_unixtime(unix_timestamp(("val1"), "MM/dd/yyyy")).cast('date'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...