Как изменить тип столбца со строки на дату в кадрах данных?
У меня есть датафрейм, в котором два столбца (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.