我目前正在轉換資料框中的一些日期資料,如下所示:
----------- ------------
|first_col|sec_col-------|
--------- --------------
|a--------|28-04-2021 |
|a--------|01-03-2017 |
|a--------|"Feb 23, 2012"|
|a--------|"May 01, 2019"|
--------- --------------
我現在想將最后兩行轉換為更好的日期格式,如下所示:23-Feb-2012 我想用正則運算式來做,但下面的代碼不起作用:
from pyspark.sql import functions as f
from pyspark.sql.functions import regexp_replace, regexp_extract
#(a lot of stuff happens here which is not important for the question so I let it out)
input_df = input_df.withColumn("sec_col", input_df.sec_col.cast("String"))
.withColumn("sec_col2",
f.when(input_df.sec_col.rlike("\"\w{3} \d{2}, \d{4}\""),
f.concat(regexp_extract("sec_col","\"(\w{3}) (\d{2}), (\d{4})\"",2),f.lit("-"), regexp_extract("sec_col","\"(\w{3}) (\d{2}), (\d{4})\"",1),f.lit("-"),regexp_extract("sec_col","\"(\w{3}) (\d{2}), (\d{4})\"",3))))
.otherwise(f.col("sec_col"))
任何人都可以幫忙嗎?
uj5u.com熱心網友回復:
您可以使用to_dateregex直接將其轉換為日期,而不是嘗試決議資料格式,因為您已經知道要決議和獲取第一個非空值date_format
資料準備
sparkDF = sql.createDataFrame([("28-04-2021",),
("01-03-2017",),
("Feb 23, 2012",),
("May 01, 2019",)
]
,['timestamp'])
sparkDF.show()
------------
| timestamp|
------------
| 28-04-2021|
| 01-03-2017|
|Feb 23, 2012|
|May 01, 2019|
------------
決議日期
sparkDF = sparkDF.withColumn('p1',F.to_date(F.col('timestamp'),"MMM dd, yyyy"))\
.withColumn('p2',F.to_date(F.col('timestamp'),"dd-MM-yyyy"))
------------ ---------- ----------
| timestamp| p1| p2|
------------ ---------- ----------
| 28-04-2021| null|2021-04-28|
| 01-03-2017| null|2017-03-01|
|Feb 23, 2012|2012-02-23| null|
|May 01, 2019|2019-05-01| null|
------------ ---------- ----------
合并
sparkDF = sparkDF.withColumn('timestamp_parsed',F.coalesce(F.col('p1'),F.col('p2')))\
.drop(*['p1','p2'])
sparkDF.show()
------------ ----------------
| timestamp|timestamp_parsed|
------------ ----------------
| 28-04-2021| 2021-04-28|
| 01-03-2017| 2017-03-01|
|Feb 23, 2012| 2012-02-23|
|May 01, 2019| 2019-05-01|
------------ ----------------
此外,您可以在此處檢查各種可用的決議格式,并且可以在此處找到類似的問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420833.html
標籤:
上一篇:Python正則運算式檢查子字串是在要查找的更大路徑的開頭還是結尾
下一篇:正則運算式可變長度
