Как преобразовать несколько столбцов `string` в моем фрейме данных в столбцы datetime? - PullRequest
1 голос
/ 21 апреля 2019

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

Пример столбца 1:

1/11/2018 9:00:00 AM

Код:

df = df.withColumn(df.column_name, to_timestamp(df.column_name,  "MM/dd/yyyy hh:mm:ss aa"))

Это хорошо работает

Пример столбца 2:

2019-01-10T00:00:00-05:00

Код:

df = df.withColumn(df.column_name, to_date(df.column_name,  "yyyy-MM-dd'T'HH:mm:ss'-05:00'"))

Это хорошо работает

Пример столбца 3:

20190112

Код:

df = df.withColumn(df.column_name, to_date(df.column_name, "yyyyMMdd"))

Это не работает. Я получаю эту ошибку:

AnalysisException: "cannot resolve 'unix_timestamp(t.`date`,

'yyyyMMdd')' due to data type mismatch: argument 1 requires (string or

date or timestamp) type, however, 't.`date`' is of int type.

Я чувствую, что все должно быть просто, но я что-то упускаю.

1 Ответ

1 голос
/ 21 апреля 2019

Ошибка довольно очевидна, ваш столбец должен быть строкой. Вы уверены, что ваша колонка уже является строкой? Кажется нет. Сначала вы можете привести его к String с помощью column.cast

import org.apache.spark.sql.types._
df = df.withColumn(df.column_name, to_date(df.column_name.cast(StringType), "yyyyMMdd")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...