如何在DataFrames中将列类型从String更改为Date



我有一个数据帧,它有两列(C,D),定义为字符串列类型,但列中的数据实际上是日期。例如,列C的日期为"01-APR-2015",列D为"20150401"。我想将这些更改为日期列类型,但我没有找到好的方法。我查看了需要在Spark SQL的DataFrame中将字符串列类型转换为Date列类型的堆栈溢出。日期格式可以是"01-APR-2015",我看了这篇文章,但它没有与日期相关的信息

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"))

具有中间CCD_ 3呼叫。

火花<2.2

由于Spark 1.5,您可以使用unix_timestamp函数将字符串解析为long,将其强制转换为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:,可能需要进行一些调整

从整数类型转换为时间戳会将源int视为以毫秒为单位。从时间戳类型转换为整数类型将在几秒内创建结果。

如果使用未修补的版本unix_timestamp,则输出需要乘以1000。

相关内容

  • 没有找到相关文章

最新更新