gpt4 book ai didi

apache-spark - 在 Spark 3.0 中将 StringType 转换为 TimestampType

转载 作者:行者123 更新时间:2023-12-01 21:24:42 24 4
gpt4 key购买 nike

我一直在使用 pyspark 3.0。我在 StringType 中有一个包含“时间”列的数据框。我正在尝试将其转换为时间戳。数据框如下所示。

+---------------+
| time|
+---------------+
|10:59:46.000 AM|
| 6:26:36.000 PM|
|11:13:38.000 PM|
+---------------+

我尝试了 to_timestamp() 和 unix_timestamp。

df.withColumn("new_time", F.to_timestamp(col("time"),"hh:mm:ss.SSS a")).show()

.

df.withColumn('new_time', F.unix_timestamp(inputDF['time'], 'hh:mm:ss.SSS a').cast(TimestampType())).show()

我得到的错误是这个。

org.apache.spark.SparkUpgradeException: You may get a different result due to the upgrading of Spark 3.0: Fail to parse '6:26:36.000 PM' in the new parser. You can set spark.sql.legacy.timeParserPolicy to LEGACY to restore the behavior before Spark 3.0, or set to CORRECTED and treat it as an invalid datetime string.

我想知道在没有setting的情况下Spark 3.0是怎么做到的

spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY")

任何帮助将不胜感激。谢谢。

最佳答案

试试这个-

df.withColumn("new_time", F.to_timestamp(F.lpad(col("time"), 15, "0"),"hh:mm:ss.SSS a")).show()

some Explanation

1. lpad(column, length, "<string_to_be_padded>")-

此函数检查 length指定的字符串,将用 string_to_be_padded 左填充如果字符串的长度 < 指定的长度。

Example

输入行 6:26:36.000 PM只有 14 个字符,因为指定的长度是 15它会离开垫0 (第三个参数)使其长度为 15。现在 o/p od lpad 是 06:26:36.000 PM .这符合我们在 to_timestamp 中指定的格式

更多解释here

关于apache-spark - 在 Spark 3.0 中将 StringType 转换为 TimestampType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63228005/

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