Подтвердить что ты не робот

Как изменить тип столбца из String в Date в DataFrames?

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

4b9b3361

Ответ 1

Искрa >= 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.

Spark & ​​lt; 2.2

Начиная с Spark 1.5 вы можете использовать функцию unix_timestamp для синтаксического анализа строки до конца, отбрасывания ее в timestamp и усечения 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:

Кастинг из целочисленных типов в timestamp обрабатывает источник int как находящийся в миллисекундах. Кастинг от timestamp до целых типов создает результат в секундах.

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