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