计算日期列条目和日期最小 Pyspark 之间的差异

Calculate difference between date column entries and date minimum Pyspark

我觉得这是一个愚蠢的问题,但我似乎无法弄明白,所以就这样吧。我有一个 PySpark 数据框,其中一列包含日期。我想计算此列中每个 date 与列中最小值 date 之间的差异,以便过滤到过去的 numberDays。我尝试了几种可能性,但似乎没有任何效果。这是我最近的尝试:

df = df.filter(
        F.datediff(
            F.col("collection_date"),
            F.lit(F.min(F.col("collection_date")))
        ) >= numberDays
    )

但我也尝试过:

df_new = df.withColumn("days", df.select("collection_date") - df.select("collection_date").min())

df_new = df.withColumn("days", df.select("collection_date") - df.select(F.min("collection_date")))

可能还有其他几个,但我似乎无法让它发挥作用,虽然我确信有一个非常简单的答案。

我找到了一个我不太喜欢的解决方案,但它似乎有效。

df = df.filter(
        F.datediff(
            F.col("collection_date"),
            F.lit(df.agg(F.min(df["collection_date"])).collect()[0][0])
        ) >= numberDays
    )

我认为将 collect() 操作放在代码中间不是特别好的做法,但这行得通。如果有人有更“Sparky”的解决方案,请告诉我。

编辑 2022 年 3 月 21 日: 这是一种更 Spark-y 的方法:

df = (
        df
        .sort(F.col("collection_date").asc())
        .filter(
            F.datediff(
                F.col("collection_date"),
                F.lit(df.select(F.min("collection_date")).first()["min(collection_date)"])
            ) >= numberDays
        )
    )