选择月末并使其成为 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 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

将空白选项添加到选择顶部并使其成为 IE 中的选定选项

PostgreSQl:选择多行并使其成为一行

将数据帧的每一行转换为字符串

如何合并两个模型集合并使其成为一个分页然后将其发送到 Laravel 中的视图

在 Xcode 中创建一个新的故事板并使其成为主要故事板(模拟器中的黑屏)

如何重置为提交并使其成为大师?