【问题标题】:Subtract months to a date using Spark Scala使用 Spark Scala 将月份减去日期
【发布时间】:2021-07-24 13:07:11
【问题描述】:

我正在尝试将某个日期减去几个月。我有以下名为 df1 的 DF,其中 MonthSub 始终为正数,因此我必须将其转换为负数以减去日期:

+-------------+----------+
|  Date       | MonthSub |
+-------------+----------+
|  31/11/2020 |   12     |
|  25/07/2020 |   5      |
|  11/01/2020 |   1      |
+-------------+----------+

我希望得到以下结果:

+-------------+----------+-------------+
|  Date       | MonthSub | Result      |
+-------------+----------+-------------+
|  31/11/2020 |   12     |  31/11/2019 | 
|  25/07/2020 |   5      |  25/02/2020 |
|  11/01/2020 |   1      |  11/12/2019 |
+-------------+----------+-------------+

DF1 的架构:

root
 |-- Date: string (nullable = true)
 |-- MonthSub: string (nullable = true)

我在做什么:

df1 = df1.withColumn("MonthSub", col("MonthSub").cast(IntegerType))

val dfMonth = df1.withColumn("Result", add_months(to_date(col("Date"), "dd-MM-yyyy"), col("MonthSub")))

但我不断得到空值。 还有其他选择吗?还是我做错了什么?

【问题讨论】:

  • 您可以在帖子中添加数据框的架构吗? (printSchema() 函数)
  • @David 完成,我尝试将 MonthSub 转换为 int 和 Date 到日期但不起作用,使用演员更新代码。

标签: scala apache-spark date


【解决方案1】:

您可以使用 add_months 负月份值,如下所示

val dfMonth = df1.withColumn("Result", add_months(
  to_date(col("Date"), "dd/MM/yyyy"), col("MonthSub") * lit(-1))
)


dfMonth.show(false)

输出:

+----------+--------+----------+
|Date      |MonthSub|Result    |
+----------+--------+----------+
|30/11/2020|12      |2019-11-30|
|25/07/2020|5       |2020-02-25|
|11/01/2020|1       |2019-12-11|
+----------+--------+----------+

您可以随意更改日期格式。

【讨论】:

    猜你喜欢
    • 2020-08-05
    • 2018-03-12
    • 1970-01-01
    • 2014-10-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多