如何计算介于 Spark 中的日期列之间的日期?

How to get count of Dates that fall in between to Date columns in Spark?

我有以下数据,

logType log_create_date error_date
A   2019-01-01  2019-01-02
A   2019-02-04  2019-02-03
A   2019-03-10  2019-03-07
A   2019-04-13  2019-04-08
B   2019-05-17  2019-05-10
B   2019-06-20  2019-06-11
B   2019-07-24  2019-07-13
B   2019-08-27  2019-08-14

我已设法将其转入下方,

val window = Window.orderBy("logType","log_crate_date")
val lagCol = lag(col("log_crate_date"), 1).over(window)
spark.sql("SELECT * FROM test")
.withColumn("log_create_date_previous", lagCol)
.select("logType","log_create_date_previous","log_create_date","error_date")

    logType log_create_date_previous    log_create_date error_date
    A   null    2019-01-01  2019-01-02
    A   2019-01-01  2019-02-04  2019-02-03
    A   2019-02-04  2019-03-10  2019-03-07
    A   2019-03-10  2019-04-13  2019-04-08
    B   2019-04-13  2019-05-17  2019-05-10
    B   2019-05-17  2019-06-20  2019-06-11
    B   2019-06-20  2019-07-24  2019-07-13
    B   2019-07-24  2019-08-27  2019-08-14
    B   2019-08-27  2019-08-27  null

现在我想为每个 $logType 计数,在 b/w 中一个不同的 log_create_date_previous & log_create_date 有多少 error_date 计数通过计算有多少 error_date 属于 log_create_date_previous & log_create_date.

要计算每种类型在“log_create_date_previous”和“log_create_date”之间有多少条记录有“error_date”,可以使用“between”函数:

  .withColumn("error_in_between", $"error_date".between($"log_create_date_previous", $"log_create_date"))
  .groupBy("logType").agg(sum(when($"error_in_between", 1).otherwise(0)).alias("error_count"))

对于提供的数据集,结果是:

+-------+-----------+
|logType|error_count|
+-------+-----------+
|A      |3          |
|B      |4          |
+-------+-----------+