pyspark 是否有一种格式可以将字符串列转换为pysark Dataframe 中的时间戳?

ql3eal8s  于 2022-11-01  发布在  Spark
关注(0)|答案(2)|浏览(188)

我有一个pyspark Dataframe 列,其值如下:

+----------------------------+
|                 date_string|
+----------------------------+
|   22JUL2020:20:35:36.009269|
|   22JUL2020:20:41:45.483747|

我想把这个字符串列转换成时间戳,所以我使用了下面的代码:
第一个
我应该使用什么格式才不会丢失秒后的数字?我尝试了以下格式,但总是得到null:
第一个

3pvhb19x

3pvhb19x1#

使用SSSSSS,即S重复的次数与字符串中毫秒的位数相同:

df.withColumn('date_timestamp', F.to_timestamp('date_string', 'ddMMMyyyy:HH:mm:ss.SSSSSS'))

完整的工作示例:

df = spark.createDataFrame(
    [
        ["22JUL2020:20:35:36.009269"],
        ["22JUL2020:20:41:45.483747"],
    ],
    ["date_string"]
)

df = df.withColumn('date_timestamp', F.to_timestamp('date_string', 'ddMMMyyyy:HH:mm:ss.SSSSSS'))

+-------------------------+--------------------------+
|date_string              |date_timestamp            |
+-------------------------+--------------------------+
|22JUL2020:20:35:36.009269|2020-07-22 20:35:36.009269|
|22JUL2020:20:41:45.483747|2020-07-22 20:41:45.483747|
+-------------------------+--------------------------+

df.select("date_timestamp").limit(1).collect()[0]["date_timestamp"].microsecond

>> 9269

df.select("date_timestamp").limit(2).collect()[1]["date_timestamp"].microsecond

>> 483747
6pp0gazn

6pp0gazn2#

您还需要指定每个microsecond的精度,以便完全解析作为TO_TIMESTAMP中的输入的日期格式
有关可用解析选项的详细列表,请参阅-DateTime Patters

至时间戳

sql.sql("""
SELECT
    date_inp,
    TO_TIMESTAMP(date_inp, "ddMMMyyyy:HH:mm:ss.SSSSSS") as date_parsed
FROM (
    SELECT "22JUL2020:20:35:36.009269" as date_inp
    UNION ALL
    SELECT "22JUL2020:20:41:45.483747" as date_inp
)
""").show(truncate=False)

+-------------------------+--------------------------+
|date_inp                 |date_parsed               |
+-------------------------+--------------------------+
|22JUL2020:20:35:36.009269|2020-07-22 20:35:36.009269|
|22JUL2020:20:41:45.483747|2020-07-22 20:41:45.483747|
+-------------------------+--------------------------+

相关问题