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

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

我有一个 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列:

  1. from pyspark.sql import functions as F
  2. # convert date into date type
  3. df = df.withColumn("date", F.to_date(F.col("date").cast("string"), "yyyyMMdd"))
  4. max_date_df = df.agg(F.max("date").alias("max_date"))
  5. result = df.crossJoin(max_date_df) \
  6. .withColumn(
  7. "text",
  8. F.when(
  9. F.year("date") < F.year("max_date"),
  10. F.lit("prev year")
  11. ).when(
  12. (F.year("date") == F.year("max_date")) & (F.quarter("date") == F.quarter("max_date") - 1),
  13. F.lit("prev quarter")
  14. ).when(
  15. (F.year("date") == F.year("max_date")) & (F.quarter("date") == F.quarter("max_date")),
  16. F.lit("current quarter")
  17. ).otherwise(F.lit("recent year"))
  18. ).select("date", "text")
  19. result.show()
  20. # +----------+---------------+
  21. # | date| text|
  22. # +----------+---------------+
  23. # |2017-09-30| prev year|
  24. # |2017-10-31| prev year|
  25. # |2017-11-30| prev year|
  26. # |2018-01-31| recent year|
  27. # |2018-02-28| recent year|
  28. # |2018-03-31| recent year|
  29. # |2018-04-30| recent year|
  30. # |2018-05-31| recent year|
  31. # |2018-06-30| recent year|
  32. # |2018-07-31| prev quarter|
  33. # |2018-07-31| prev quarter|
  34. # |2018-08-31| prev quarter|
  35. # |2018-08-31| prev quarter|
  36. # |2018-09-30| prev quarter|
  37. # |2018-09-30| prev quarter|
  38. # |2018-09-30| prev quarter|
  39. # |2018-10-31|current quarter|
  40. # |2018-10-31|current quarter|
  41. # |2018-11-30|current quarter|
  42. # |2018-11-30|current quarter|
  43. # +----------+---------------+
展开查看全部

相关问题