在Pyspark上将字符串类型转换为时间戳

cclgggtu  于 2022-12-30  发布在  Apache
关注(0)|答案(2)|浏览(193)

如何将字符串值格式为"Dec 25 2022 6:31AM"的列转换为时间戳?
无论我做什么,我仍然在新列中得到空值。
我试过了

import pyspark.sql.functions as fn

df.withColumn('new_ts', fn.col('SendTime').cast("timestamp"))
df.withColumn("new_ts",fn.to_timestamp(fn.col("SendTime")).cast('string'))
df.withColumn('new_ts', (fn.to_timestamp('SendTime', 'yyyy-MM-dd HH:mm:ss.SSS-0300')).cast('date'))

以及其它尝试。

9udxz4iz

9udxz4iz1#

您已经很接近了,to_timestamp在您的情况下是正确的函数,但您需要修复您的日期时间模式。
我就能得出这样的结论:

import pyspark.sql.functions as F

data1 = [
    ["Dec 25 2022 6:31AM"],
    ["Nov 11 2022 02:31AM"],
    ["Jun 03 2022 08:31PM"]
]

df = spark.createDataFrame(data1).toDF("time")

tmp = df.withColumn("test", F.to_timestamp(F.col("time"), "MMM dd yyyy h:mma"))
tmp.show(truncate = False)

输出为:

+-------------------+-------------------+
|time               |test               |
+-------------------+-------------------+
|Dec 25 2022 6:31AM |2022-12-25 06:31:00|
|Nov 11 2022 02:31AM|2022-11-11 02:31:00|
|Jun 03 2022 08:31PM|2022-06-03 20:31:00|
+-------------------+-------------------+

所以我觉得你可以尝试用这个格式:年月日时:分

mznpcxlj

mznpcxlj2#

Apache PySpark中的to_timestamp()函数通常用于将字符串转换为时间戳(即时间戳类型),时间戳的默认格式为“MM-dd-yyyy HH:mm:ss. SSS”,并且如果输入不是以指定的形式,则返回Null。

相关问题