簡體   English   中英

Python Spark Dataframe:將字符串列轉換為時間戳

[英]Python Spark Dataframe: Conversion of string column into timestamp

我有時間列,它具有對象數據類型並包含以下格式的值:

0 days 01:30:00.0

我想將上面的時間列更改為 HH:mm:ss 的格式,使其看起來像以下格式:

01:30:00

我使用以下代碼轉換為所需的格式:

df.withColumn('TIME_timestamp',F.to_timestamp("time", "HH:mm:ss")).show()

但是,它返回了空列。 上述代碼產生的輸出為:

 time|              TIME_timestamp|
+-------------------+--------------+
0 days 00:00:00.0 |          null|
0 days 00:30:00.0 |          null|
0 days 01:00:00.0 |          null|
0 days 01:30:00.0 |          null|
0 days 02:00:00.0 |          null|
0 days 02:30:00.0 |          null|
+-------------------+---------------+

誰能指導我在哪里犯了錯誤?

您可以使用 substring 將您的時間值放入 to_timestamp 函數中。 時間戳將給出其默認日期,因為時間戳需要日期。

df.withColumn("Time_timestamp", F.to_timestamp(F.substring("time",7,9),"HH:mm:ss")).show()

+-----------------+-------------------+
|             time|     Time_timestamp|
+-----------------+-------------------+
|0 days 00:00:00.0|1970-01-01 00:00:00|
|0 days 00:30:00.0|1970-01-01 00:30:00|
|0 days 01:00:00.0|1970-01-01 01:00:00|
|0 days 01:30:00.0|1970-01-01 01:30:00|
+-----------------+-------------------+

我建議您使用 unix_timestamp 以秒格式保存它以丟失日期部分。

df.withColumn("Time_timestamp", F.unix_timestamp(F.substring("time",7,9),"HH:mm:ss")).show()

+-----------------+--------------+
|             time|Time_timestamp|
+-----------------+--------------+
|0 days 00:00:00.0|             0|
|0 days 00:30:00.0|          1800|
|0 days 01:00:00.0|          3600|
|0 days 01:30:00.0|          5400|
+-----------------+--------------+

或者只是將其保留為字符串:

df.withColumn("Time_timestamp", F.substring("time",7,9)).show()

+-----------------+--------------+
|             time|Time_timestamp|
+-----------------+--------------+
|0 days 00:00:00.0|      00:00:00|
|0 days 00:30:00.0|      00:30:00|
|0 days 01:00:00.0|      01:00:00|
|0 days 01:30:00.0|      01:30:00|
+-----------------+--------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM