gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:08:36 24 4
gpt4 key购买 nike

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

最佳答案

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称呼。

Spark < 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-11724,根据 Spark 版本,您可能需要进行一些调整。 :

Casting from integer types to timestamp treats the source int as being in millis. Casting from timestamp to integer types creates the result in seconds.



如果您使用未打补丁的版本 unix_timestamp输出需要乘以 1000。

关于scala - 如何在 DataFrames 中将列类型从 String 更改为 Date?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com