Scala 如何在此列上执行一组函数";项目“U值”;数据集?

Scala 如何在此列上执行一组函数";项目“U值”;数据集?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,使用spark-sql-2.4.1v val df = Seq( ("50312", "2019-03-31", "0.9992019"), ("50312", "2018-03-31", "0.9992018"), ("50312", "2017-03-31", "0.9992017")).toDF("id","date","item_value") .withColumn("date", to_date(col("date") ,"yyyy-MM-dd").cast(DateType

使用spark-sql-2.4.1v

val df = Seq(
  ("50312", "2019-03-31", "0.9992019"),
  ("50312", "2018-03-31", "0.9992018"),
("50312", "2017-03-31", "0.9992017")).toDF("id","date","item_value")
.withColumn("date", to_date(col("date") ,"yyyy-MM-dd").cast(DateType))
.withColumn("add_months", add_months($"date",-17))


val df2  = df.filter($"date".between(to_date(lit("2019-03-31"),"yyyy-MM-dd"),  add_months(to_date(lit("2019-03-31"),"yyyy-MM-dd"),-17)));
df2.show(20)

val df3  = df.filter($"date".lt(to_date(lit("2019-03-31"),"yyyy-MM-dd")))
             .filter($"date".gt(add_months(to_date(lit("2019-03-31"),"yyyy-MM-dd"),-17)))
df3.show(20)
在没有按预期工作之间,这里出了什么问题?如何修复它


正如在注释中所提到的,首先期望下限,然后期望上限

我记得一件事,但我现在找不到:

使用日期/时间戳时,包容性的处理方式不一致


类似2020-01-01的内容应该是包含的(但不在下限),而2020-01-01 00:00:00是。

您颠倒了函数的下限和上限…它是包含的,请参阅我上面评论中的链接文档。