使用 pyspark.sql.functions unix_timestamp 得到 null
with pyspark.sql.functions unix_timestamp get null
我尝试使用此代码将列从字符串转换为时间戳
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
。
我尝试使用此代码将列从字符串转换为时间戳
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
。