[英]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.