编辑:抱歉,示例数据框有些偏离。以下是我尝试转换的更正后的示例数据框:
Timestamp (CST)
12/8/2018 05:23 PM
11/29/2018 10:20 PM
我根据以下建议尝试了以下代码,但返回了空值。
df = df.withColumn('Timestamp (CST)_2', from_unixtime(unix_timestamp(col(('Timestamp (CST)')), "yyyy/MM/dd hh:mm:ss aa"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
df = df.withColumn("Timestamp (CST)_3", F.to_timestamp(F.col("Timestamp (CST)_2")))
我有一个名为“时间戳(CST)”的字段,它是一个字符串。现在是中部标准时间。
Timestamp (CST)
2018-11-21T5:28:56 PM
2018-11-21T5:29:16 PM
如何创建一个带有“时间戳记(CST)”的新列并将其更改为UTC并将其转换为带有24小时时钟上的时间戳的日期时间?
下面是我想要的表,我希望数据类型是时间戳记:
Timestamp (CST)_2
2018-11-21T17:28:56.000Z
2018-11-21T17:29:16.000Z
我尝试了以下代码,但所有结果都返回null:
df = df.withColumn("Timestamp (CST)_2", to_timestamp("Timestamp (CST)", "yyyy/MM/dd h:mm p"))
答案 0 :(得分:1)
首先,使用
导入from_unixtime
,unix_timestamp
和col
from pyspark.sql.functions import from_unixtime, unix_timestamp, col
然后,在DataFrame
df_time
>>> cols = ['Timestamp (CST)']
>>> vals = [
... ('2018-11-21T5:28:56 PM',),
... ('2018-11-21T5:29:16 PM',)]
>>> df_time = spark.createDataFrame(vals, cols)
>>> df_time.show(2, False)
+---------------------+
|Timestamp (CST) |
+---------------------+
|2018-11-21T5:28:56 PM|
|2018-11-21T5:29:16 PM|
+---------------------+
然后,我的方法是
>>> df_time_twenfour = df_time.withColumn('Timestamp (CST)', \
... from_unixtime(unix_timestamp(col(('Timestamp (CST)')), "yyyy-MM-dd'T'hh:mm:ss aa"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"))
>>> df_time_twenfour.show(2, False)
+------------------------+
|Timestamp (CST) |
+------------------------+
|2018-11-21T17:28:56.000Z|
|2018-11-21T17:29:16.000Z|
+------------------------+
注释
HH
而不是hh
。 因为您有一个PM
,所以在aa
中使用yyyy-MM-dd'T'hh:mm:ss aa
来指定PM。
您输入的字符串中包含T
,因此,您必须将其指定为上述格式。