我一直在使用PySpark3.0。我有一个stringtype中带有“time”列的Dataframe。我想把它转换成时间戳。Dataframe如下所示。
+---------------+
| time|
+---------------+
|10:59:46.000 AM|
| 6:26:36.000 PM|
|11:13:38.000 PM|
+---------------+
我尝试了\u timestamp()和unix \u 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.
我想知道spark 3.0在没有设置的情况下是如何做到的
spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY")
任何帮助都将不胜感激。谢谢。
2条答案
按热度按时间h22fl7wq1#
不需要填充。。
您需要更改转换字符串的格式。。从中删除“h”,然后就可以了。
格式说明:
ryevplcw2#
试试这个-
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/pod lpad是06:26:36.000 PM
. 这符合中指定的格式to_timestamp
这里有更多的解释