gpt4 book ai didi

python - 使用 pyspark.sql.functions unix_timestamp 得到 null

转载 作者:太空狗 更新时间:2023-10-30 00:53:34 25 4
gpt4 key购买 nike

我尝试使用此代码将列从字符串转换为时间戳

from pyspark.sql.functions import unix_timestamp
(sc
.parallelize([Row(dt='2017-01-23T08:12:39.929+01:00')])
.toDF()
.withColumn("parsed", unix_timestamp("dt", "yyyy-MM-ddThh:mm:ss")
.cast("double")
.cast("timestamp"))
.show(1, False))

但我得到的是空值

+-----------------------------+------+
|dt |parsed|
+-----------------------------+------+
|2017-01-23T08:12:39.929+01:00|null |
+-----------------------------+------+

为什么?

最佳答案

您得到 NULL 因为您使用的格式与数据不匹配。要获得最小匹配,您必须使用单引号转义 T:

yyyy-MM-dd'T'kk:mm:ss

要匹配完整模式,您需要 S 表示毫秒,X 表示时区:

yyyy-MM-dd'T'kk:mm:ss.SSSXXX

但在当前的 Spark 版本中直接cast:

from pyspark.sql.functions import col

col("dt").cast("timestamp")

应该工作得很好:

spark.sql(
"""SELECT CAST("2011-01-23T08:12:39.929+01:00" AS timestamp)"""
).show(1, False)
+------------------------------------------------+
|CAST(2011-01-23T08:12:39.929+01:00 AS TIMESTAMP)|
+------------------------------------------------+
|2011-01-23 08:12:39.929 |
+------------------------------------------------+

引用:SimpleDateFormat .

关于python - 使用 pyspark.sql.functions unix_timestamp 得到 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45697720/

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