преобразовать строку в дату (формат годовой квартал) в pyspark - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть следующий фрейм данных с колонкой:

df

id dt
1  2016/2017 Q2
2  2017/2018 Q1
3  2018/2019 Q2

output:

df

id date
1  2016-07-01
2  2017-04-01
3  2018-07-01

Мне нужно конвертировать их в date в pyspark Обычно я использую приведенный ниже код для преобразования в дату, указав формат, но не могу найти какой-либо формат для квартала, пожалуйста, посоветуйте.

код: F.from_unixtime(F.unix_timestamp(date_str, fmt)).cast("date")

1 Ответ

2 голосов
/ 23 апреля 2020

Я думаю, что нет прямой функции / формата , которая будет возвращать квартальную дату.

Нам нужно использовать when оператор (или) udf для этого случая.

Пример:

df=spark.createDataFrame([("1","2016/2017 Q2"),("2","2017/2018 Q1"),("3","2018/2019 Q3"),("4","2019/2020 Q4")],["id","dt"])

#4 quarters in an year
df.withColumn("date",
    when(lower(reverse(split(col("dt")," "))[0]) == "q1",concat_ws("-",substring(col("dt"),0,4),lit("01-01")).cast("date")).\
    when(lower(reverse(split(col("dt")," "))[0]) == "q2",concat_ws("-",substring(col("dt"),0,4),lit("04-01")).cast("date")).\
    when(lower(reverse(split(col("dt")," "))[0]) == "q3",concat_ws("-",substring(col("dt"),0,4),lit("07-01")).cast("date")).\
    when(lower(reverse(split(col("dt")," "))[0]) == "q4",concat_ws("-",substring(col("dt"),0,4),lit("10-01")).cast("date")).\
    otherwise(lit("Quarter not found"))).show()

#+---+------------+----------+
#| id|          dt|      date|
#+---+------------+----------+
#|  1|2016/2017 Q2|2016-04-01|
#|  2|2017/2018 Q1|2017-01-01|
#|  3|2018/2019 Q3|2018-07-01|
#|  4|2019/2020 Q4|2019-10-01|
#+---+------------+----------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...