เลือกสิ้นเดือนและทำให้เป็นสตริงใน 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 ในฟังก์ชัน spark ที่สร้างขึ้นเพื่อรับวันสุดท้าย

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
โอเค และฉันจะเปลี่ยนรูปแบบจาก yyyy-MM-dd เป็น yyyyMMdd ได้อย่างไร มันสามารถเป็นสตริง มันไม่จำเป็นต้องเป็นเดท - person Kristof; 19.06.2020
comment
การเลือกวันที่ในไฟล์ปาร์เก้คือ /date=20190131 ซึ่งเป็นสตริง ไม่ใช่วันที่เช่น /date=2019-01-31 - person Kristof; 19.06.2020