计算日期列条目和日期最小 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
)
)
我觉得这是一个愚蠢的问题,但我似乎无法弄明白,所以就这样吧。我有一个 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
)
)