【问题标题】:How can I use regex_replace in pyspark to reformat the date from yyyymmdd to yyyy/mm/dd and reformat time from HHmmss to HH:mm:ss如何在 pyspark 中使用 regex_replace 将日期从 yyyymmdd 重新格式化为 yyyy/mm/dd 并将时间从 HHmmss 重新格式化为 HH:mm:ss
【发布时间】:2020-03-26 16:30:44
【问题描述】:

我正在尝试使用 regex_replace 将日期列从 yyyymmdd 重新格式化为 yyyy/mm/dd 并将另一列从 HHmmss 重新格式化为 HH:mm:ss。日期和时间列都是字符串。

发件人:

+----------+--------+
|   date   |  time  |
+----------+--------+
| 20200326 | 122450 |
+----------+--------+

收件人:

+------------+----------+
|    date    |   time   |
+------------+----------+
| 2020/03/26 | 12:24:50 |
+------------+----------+

这是我尝试过的:

datePattern = "([0-9]{4})([0-9]{2})([0-9]{2})"
timePattern = "([0-9]{2})([0-9]{2})([0-9]{2})"

df.withColumn("date", regexp_replace(df.date, datePattern, "$1/$2/$3"))
df.withColumn("time", regexp_replace(df.time, timePattern, "$1:$2:$3"))

这是我得到的:

+----------+--------+
|   date   |  time  |
+----------+--------+
| 20200326 | 122450 |
+----------+--------+

不确定我哪里出错了?另外,有没有比使用 regex_replace 更好的做法?

【问题讨论】:

    标签: regex date time pyspark


    【解决方案1】:

    使用 from_unixtime,unix_timestamp 函数代替 regexp_replace

    df.show()
    #+--------+------+
    #|    date|  time|
    #+--------+------+
    #|20200326|122450|
    #+--------+------+
    
    df.withColumn("date",from_unixtime(unix_timestamp(col("date"),"yyyyMMdd"),"yyyy/MM/dd")).\
    withColumn("time",from_unixtime(unix_timestamp(col("time"),"HHmmss"),"HH:mm:ss")).\
    show()
    #+----------+--------+
    #|      date|    time|
    #+----------+--------+
    #|2020/03/26|12:24:50|
    #+----------+--------+
    

    From Spark-2.2+

    我们也可以在这种情况下使用to_date(),to_timestamp() and date_format() 函数!

    from pyspark.sql.functions import *
    df.withColumn("date",date_format(to_date(col("date"),"yyyyMMdd"),"yyyy/MM/dd")).\
    withColumn("time",date_format(to_timestamp(col("time"),"HHmmss"),"HH:mm:ss")).\
    show()
    #+----------+--------+
    #|      date|    time|
    #+----------+--------+
    #|2020/03/26|12:24:50|
    #+----------+--------+
    

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 2020-03-07
      • 2015-09-02
      • 2021-04-18
      • 1970-01-01
      • 2017-08-21
      相关资源
      最近更新 更多