Ответ 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.