Python 3.x Pyspark从另一列中找到最大日期后,生成一个数据框列,该列描述了截至去年的所有月末日期
我有一个Python 3.x Pyspark从另一列中找到最大日期后,生成一个数据框列,该列描述了截至去年的所有月末日期,python-3.x,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Python 3.x,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个date列(整数类型)。我必须找到日期的最大值,并生成一个描述列,其中包含上一年的详细日期 例如,该列的最大日期为20181210,那么应该有一个列,其中包含当前季度、上一季度、当前年度月份和上一年度月份的文本 日期 文本 20180731 上季度 20180831 上季度 20180930 上季度 20181130 近几年 20181031 近几年 20180930 近几年 20180831 近几年 20180731 近几年 20180630 近几年 20180531 近几年 2018
date
列(整数类型)。我必须找到日期的最大值
,并生成一个描述列,其中包含上一年的详细日期
例如,该列的最大日期为20181210,那么应该有一个列,其中包含当前季度
、上一季度
、当前年度
月份和上一年度
月份的文本
日期
文本
20180731
上季度
20180831
上季度
20180930
上季度
20181130
近几年
20181031
近几年
20180930
近几年
20180831
近几年
20180731
近几年
20180630
近几年
20180531
近几年
20180430
近几年
20180331
近几年
20180228
近几年
20180131
近几年
20171231
上一年
20171130
上一年
20171031
上一年
20170930
上一年
..
..
..
..
您可以获取df中的最大日期,并与原始数据帧进行交叉连接,然后使用一些when表达式设置描述列:
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|
#+----------+---------------+
从pyspark.sql导入函数为F
#将日期转换为日期类型
df=df.withColumn(“date”,F.to_date(F.col(“date”).cast(“string”),“yyyyMMdd”))
max_date_df=df.agg(F.max(“日期”)。别名(“max_date”))
结果=df.交叉连接(最大日期)\
.withColumn(
“文本”,
F.什么时候(
F年(“日期”)