pilih akhir bulan dan jadikan string di pyspark

Saya ingin membuat loop di pyspark di mana saya memberikan satu bulan dan itu harus memilih tabel pada akhir bulan dan akhir bulan pada bulan sebelumnya. Pemilihan bulan dilakukan dengan string. Jadi saya berikan '201901' dan harus memilih '20190131' dan '20181231'.

Dan jika memungkinkan, ini harus berjalan secara otomatis dan memilih akhir bulan sebelumnya dari hari ini dan akhir bulan sebelumnya hari ini. Jadi hari ini kita adalah 07-05-2020 jadi harus memilih '20200430' dan '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 sumber


Jawaban (1)


Gunakan add_months,last_day pada fungsi percikan bawaan untuk mendapatkan hari terakhir.

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
Oke dan bagaimana cara mengubah format dari yyyy-MM-dd menjadi yyyyMMdd? Itu bisa berupa string. Itu tidak harus berupa kencan. - person Kristof; 19.06.2020
comment
pemilihan tanggal pada file parket adalah dengan /date=20190131 yang merupakan string dan bukan tanggal seperti /date=2019-01-31 - person Kristof; 19.06.2020