首页 > 解决方案 > 选择月末并使其成为 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'])

标签: dateapache-sparkpyspark

解决方案


使用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'

推荐阅读