我希望將字串格式的數字轉換為時間戳。
樣本:
-------- -------------------
|date_str|expected date |
-------- -------------------
|1.63E 15|1991-11-25 13:39:00|
|1.63E 15|1991-11-25 13:40:00|
|1.63E 15|1991-11-25 13:41:00|
-------- -------------------
我曾嘗試使用to_timestamp()但回傳 Null 值。也轉換成unix_timestamp但沒有運氣。
sdf1.select(F.to_timestamp(sdf1.date_str, 'yyyy/MM/dd HH:mm:ss').alias('date')).show()
sdf1.select(to_timestamp('date_str', 'dd/MM/yyyy HH:mm:ss')).show()
uj5u.com熱心網友回復:
首先,你要求的轉化是不可能的。相同的輸入不能產生不同的輸出。它應該是 :
-------- -------------------
|date_str|expected date |
-------- -------------------
|1.63E 15|1991-11-25 13:39:00|
|1.63E 15|1991-11-25 13:39:00|
|1.63E 15|1991-11-25 13:39:00|
-------- -------------------
然后,您需要的功能可能是from_unixtime- 將數字格式的時間戳轉換為字串/時間戳格式的時間戳:
time_df = spark.createDataFrame([(1428476400,)], ['unix_time'])
time_df.select(from_unixtime('unix_time').alias('ts')).collect()
# [Row(ts='2015-04-08 00:00:00')]
唯一的問題是,在您的示例中,您的數字是 16 位長 ( E 15),這對于 unix 時間戳來說太精確了。您可能應該將其除以 1000000。
from pyspark.sql import functions as F, types as T
df.withColumn(
"date_num", F.col("date_str").cast(T.DecimalType(16, 0)) / 1000000
).withColumn(
"date", F.from_unixtime("date_num")
).show()
-------- ------------------- -------------------
|date_str| date_num| date|
-------- ------------------- -------------------
|1.63E 15|1630000000.00000000|2021-08-26 17:46:40|
-------- ------------------- -------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311431.html
下一篇:將矩陣的RDD轉換為向量的RDD
