Запрос на получение даты каждого воскресенья и субботы в Hive или Pyspark

Я хочу получать даты всех воскресений и суббот в Hive с заданной даты. Например, если задана дата 2020-10-01, она должна вернуть две строки sunday_dates, saturday_dates со значениями всех воскресений и суббот после этой даты 2020-10-01.

Я пробовал что-то подобное, но, похоже, у меня не работает.

spark.sql("select date_sub('2020-10-01', cast(date_format(current_date(),'u')%7 as int)) as sunday_dates").show(10,False)
+------------+
|sunday_dates|
+------------+
|2020-09-29  |
+------------+

Есть ли способ добиться этого в Hive или pyspark.

Спасибо!


person bunnylorr    schedule 03.11.2020    source источник
comment
Не могли бы вы проголосовать за решение, если оно вам помогло? Я буду очень признателен за это   -  person dsk    schedule 04.11.2020


Ответы (1)


Вам нужно использовать date_trunc(), чтобы достичь даты начала недели. Опубликуйте, что date_sub() и date_sub(), чтобы получить субботу и воскресенье.

Создайте фрейм данных здесь

    df = spark.createDataFrame([("2020-11-02",1),("2020-11-03",2),("2020-11-04",3)],["event_dt","word"])
    df.show()
    df = df.withColumn("week_start", F.date_trunc('WEEK', F.col("event_dt")))
#`In case you want to get backward weekdays`
    df = df.selectExpr('*', 'date_sub(week_start, 2) as backward_Saturday')
    df = df.selectExpr('*', 'date_sub(week_start, 1) as backward_Sunday')
# In case you want forward weekends
    df = df.selectExpr('*', 'date_add(week_start, 5) as forward_Saturday')
    df = df.selectExpr('*', 'date_add(week_start, 6) as forward_Sunday')
    df.show()

Вход

+----------+----+
|  event_dt|word|
+----------+----+
|2020-11-02|   1|
|2020-11-03|   2|
|2020-11-04|   3|
+----------+----+

Вывод

+----------+----+-------------------+-----------------+---------------+----------------+--------------+
|  event_dt|word|         week_start|backward_Saturday|backward_Sunday|forward_Saturday|forward_Sunday|
+----------+----+-------------------+-----------------+---------------+----------------+--------------+
|2020-11-02|   1|2020-11-02 00:00:00|       2020-10-31|     2020-11-01|      2020-11-07|    2020-11-08|
|2020-11-03|   2|2020-11-02 00:00:00|       2020-10-31|     2020-11-01|      2020-11-07|    2020-11-08|
|2020-11-04|   3|2020-11-02 00:00:00|       2020-10-31|     2020-11-01|      2020-11-07|    2020-11-08|
+----------+----+-------------------+-----------------+---------------+----------------+--------------+ 
person dsk    schedule 03.11.2020