Как изменить тип столбца со строки на дату в кадрах данных?

У меня есть датафрейм, в котором два столбца (C, D) определены как строковый тип столбца, но данные в столбцах на самом деле даты. например, столбец C имеет дату "01-APR-2015", а столбец D - "20150401". Я хочу изменить их на тип столбца даты, но я не нашел хорошего способа сделать это. Я смотрю на переполнение стека, мне нужно преобразовать тип столбца строки в тип столбца Дата в DataFrame Spark SQL. формат даты может быть "01-АПРЕЛЬ-2015", и я смотрю на это сообщение, но у него не было информации, относящейся к дате

1 ответ

Решение

Spark >= 2,2

Ты можешь использовать to_date:

import org.apache.spark.sql.functions.{to_date, to_timestamp}

df.select(to_date($"ts", "dd-MMM-yyyy").alias("date"))

или же to_timestamp:

df.select(to_date($"ts", "dd-MMM-yyyy").alias("timestamp"))

с промежуточным unix_timestamp вызов.

Искра < 2.2

Начиная с Spark 1.5 вы можете использовать unix_timestamp функция для разбора строки на long, приведения ее к метке времени и усечения to_date:

import org.apache.spark.sql.functions.{unix_timestamp, to_date}

val df = Seq((1L, "01-APR-2015")).toDF("id", "ts")

df.select(to_date(unix_timestamp(
  $"ts", "dd-MMM-yyyy"
).cast("timestamp")).alias("timestamp"))

Примечание:

В зависимости от версии Spark вам могут потребоваться некоторые настройки из-за SPARK-11724:

Преобразование из целочисленных типов во временную метку обрабатывает источник int как миллис. Преобразование из метки времени в целочисленные типы создает результат в секундах.

Если вы используете незапатченную версию unix_timestamp вывод требует умножения на 1000.

Другие вопросы по тегам