выберите конец месяца и сделайте его строкой в ​​pyspark

Я хочу создать цикл в pyspark, где я даю месяц, и он должен выбирать таблицу в конце месяца и в конце месяца предыдущего месяца. Выбор месяца производится строкой. Я даю «201901», и он должен выбрать «20190131» и «20181231».

И, если возможно, он должен запускаться автоматически и выбирать конец предыдущего месяца с сегодняшнего дня и конец предыдущего предыдущего месяца сегодня. Итак, сегодня у нас 2020-05-07, поэтому следует выбрать «20200430» и «20200331».

def selectTables(date):

    i = 0

    for i in range(len(date)): 

        recentDate = .... # should be for the first iteration '20190131'
        previousDate = .... # should be for the first iteration '20181231'

    recent = spark.read.parquet('table.parquet/date=' + recentDate[i])
    previous = spark.read.parquet('table.parquet/date=' + previousDate[i])



selectTables(['201901', '201902'])

person Kristof    schedule 07.05.2020    source источник


Ответы (1)


Используйте add_months, last_day во встроенных функциях искры, чтобы получить последний день.

Example:

date='201901'

recentDate=spark.sql("select string(last_day(to_date('{}','yyyyMM')))".format(date)).collect()[0][0]
#u'2019-01-31'

previousDate=spark.sql("select string(last_day(add_months(to_date('{}','yyyyMM'),'-1')))".format(date)).collect()[0][0]
#u'2018-12-31'
person Shu    schedule 07.05.2020
comment
Хорошо, а как мне изменить формат с гггг-ММ-дд на ггггММдд? Это может быть строка. Это не обязательно должно быть свидание. - person Kristof; 19.06.2020
comment
выбор даты в файле паркета с / date = 20190131, который является строкой, а не датой типа / date = 2019-01-31 - person Kristof; 19.06.2020