根据 Pyspark 中的条件确定日期数组是否包含特定日期

Determine if an array of Dates includes a certain date by condition in Pyspark

我有一个包含日期的数组列。我想要 return 一个 true false 列来搜索数组并确定数组是否包含某个条件之前的日期。

示例:

Date_Array Location ID
[4/22/21,3/21/21] Dallas 5
[5/22/21,6/18/21] Dallas 5

如果我的条件是 21 年 1 月 4 日之前的任何日期,结果应该是这样的:

Date_Array Location ID bool_date
[4/22/21,3/21/21] Dallas 5 TRUE
[5/22/21,6/18/21] Dallas 5 FALSE

这可以用 Pyspark 或 Pandas 完成吗?

根据你的实际情况,你可以在这里自定义代码,但总体思路是获取数组的最大和最小日期并将其用于任何比较

from pyspark.sql import functions as F

(df
    .withColumn('max_date', F.array_max('date_array'))
    .withColumn('min_date', F.array_min('date_array'))
    .withColumn('bool_date1', (F.col('min_date') < F.lit(datetime.fromisoformat('2021-04-01'))))
    .show()
)

+------------------------+--------+---+----------+----------+----------+
|date_array              |location|id |max_date  |min_date  |bool_date1|
+------------------------+--------+---+----------+----------+----------+
|[2021-04-22, 2021-03-21]|Dallas  |5  |2021-04-22|2021-03-21|true      |
|[2021-05-22, 2021-06-18]|Dallas  |5  |2021-06-18|2021-05-22|false     |
+------------------------+--------+---+----------+----------+----------+