Как я могу использовать regex_replace в pyspark, чтобы переформатировать дату из ггггммдд в гггг / мм / дд и переформатировать время от ЧЧммсс до ЧЧ: мм: сс - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь использовать regex_replace для переформатирования столбца даты из ггггммдд в гггг / мм / дд и другого столбца из ЧЧммсс в ЧЧ: мм: сс. Столбцы даты и времени являются строками.

От:

+----------+--------+
|   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?

1 Ответ

2 голосов
/ 26 марта 2020

Использование 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 () и 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|
#+----------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...