pyspark在从另一列中找到最大日期后,生成一个dataframe列,其中包含到去年为止的所有月末日期的描述

y53ybaqx  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(398)

我有一个 date 列(整数类型)。我必须找到最大的 date 并生成一个描述列,其中包含到上一年的日期的详细信息。
例如,列的最大日期是20181210,那么应该有一列 text 对于 current quarter , previous quarter , current year 几个月,还有 previous year 月。
日期文本20180731修订季度20180831修订季度20180930上一季度20181130最近一年20181031最近一年20180930最近一年20180831最近一年20180731最近一年20180630最近一年20180531最近一年20180430最近一年20180331最近一年20180228最近一年20180131最近一年20171231最近一年20171130最近一年20171031最近一年20170930prev年份。。。。。。。。
我试着提取 year , month ,和 daydate 列,然后放置if条件。
还有其他更简单的方法吗?

cpjpxq1n

cpjpxq1n1#

您可以获取df中的max date,并与原始Dataframe进行交叉连接,然后使用一些when表达式来设置description列:

from pyspark.sql import functions as F

# convert date into date type

df = df.withColumn("date", F.to_date(F.col("date").cast("string"), "yyyyMMdd"))

max_date_df = df.agg(F.max("date").alias("max_date"))

result = df.crossJoin(max_date_df) \
    .withColumn(
    "text",
    F.when(
        F.year("date") < F.year("max_date"),
        F.lit("prev year")
    ).when(
        (F.year("date") == F.year("max_date")) & (F.quarter("date") == F.quarter("max_date") - 1),
        F.lit("prev quarter")
    ).when(
        (F.year("date") == F.year("max_date")) & (F.quarter("date") == F.quarter("max_date")),
        F.lit("current quarter")
    ).otherwise(F.lit("recent year"))
).select("date", "text")

result.show()

# +----------+---------------+

# |      date|           text|

# +----------+---------------+

# |2017-09-30|      prev year|

# |2017-10-31|      prev year|

# |2017-11-30|      prev year|

# |2018-01-31|    recent year|

# |2018-02-28|    recent year|

# |2018-03-31|    recent year|

# |2018-04-30|    recent year|

# |2018-05-31|    recent year|

# |2018-06-30|    recent year|

# |2018-07-31|   prev quarter|

# |2018-07-31|   prev quarter|

# |2018-08-31|   prev quarter|

# |2018-08-31|   prev quarter|

# |2018-09-30|   prev quarter|

# |2018-09-30|   prev quarter|

# |2018-09-30|   prev quarter|

# |2018-10-31|current quarter|

# |2018-10-31|current quarter|

# |2018-11-30|current quarter|

# |2018-11-30|current quarter|

# +----------+---------------+

相关问题