【问题标题】:How to convert month of year to first month如何将一年中的月份转换为第一个月
【发布时间】:2021-07-05 01:45:37
【问题描述】:

我正在尝试获取从当前日期到前 3 年的日期范围 之前 3 年的数据应该从 1 月 1 日开始。 下面是我试过的代码sn-p。

dateDF = spark.sql("select current_date() as current_date, add_months(current_date(),-36) as end_date")
dateDF =  dateDF.withColumn("end_date_first_date", F.trunc("end_date", "month")).withColumn("end_date_first_date_first_month",lit(''))
dateDF.show()

+------------+----------+-------------------+-------------------------------+
|current_date|  end_date|end_date_first_date|end_date_first_date_first_month|
+------------+----------+-------------------+-------------------------------+
|  2021-04-09|2018-04-09|         2018-04-01|                               |
+------------+----------+-------------------+-------------------------------+

在这里我可以得到第一次约会,但我怎样才能得到第一个月。有没有预定义的函数?

预期输出

+------------+----------+-------------------+-------------------------------+
|current_date|  end_date|end_date_first_date|end_date_first_date_first_month|
+------------+----------+-------------------+-------------------------------+
|  2021-04-09|2018-04-09|         2018-04-01|   2018-01-01                  |
+------------+----------+-------------------+-------------------------------+

【问题讨论】:

    标签: dataframe apache-spark date pyspark apache-spark-sql


    【解决方案1】:

    只需在F.trunc 中使用year 而不是month

    dateDF = dateDF.withColumn(
        "end_date_first_date", 
        F.trunc("end_date", "month")
    ).withColumn(
        "end_date_first_date_first_month",
        F.trunc("end_date", "year")
    )
    

    【讨论】:

    • 有没有办法告诉从 end_date 中选择一个特定的月份。例如:这里 end_date 是 2018-01-01,假设我需要月份为“十月”,即 2018-10-01,是否也可以使用 F.trunc 来实现?
    • 您可以使用add_months,例如F.add_months(F.trunc("end_date", "year"), 9)
    • 哦,好酷。这可以通过调用 add_months 来实现。明白了
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    相关资源
    最近更新 更多