选择月末并使其成为 pyspark 中的字符串
Posted
技术标签:
【中文标题】选择月末并使其成为 pyspark 中的字符串【英文标题】:select end of month and make it a string in pyspark 【发布时间】:2020-05-07 13:52:57 【问题描述】:我想在 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'])
【问题讨论】:
【参考方案1】:在内置的 spark 函数中使用 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'
【讨论】:
好的,如何将格式从 yyyy-MM-dd 更改为 yyyyMMdd?它可以是一个字符串。不一定是日期。 parquet 文件中日期的选择是 /date=20190131,它是一个字符串,而不是像 /date=2019-01-31 这样的日期以上是关于选择月末并使其成为 pyspark 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何合并两个模型集合并使其成为一个分页然后将其发送到 Laravel 中的视图