Python 如何使用dataframe中的startDate和endDate,并使用它过滤pyspark中的另一个数据帧
我有两张表,如下所示: 第一张表:Python 如何使用dataframe中的startDate和endDate,并使用它过滤pyspark中的另一个数据帧,python,pyspark,pyspark-dataframes,Python,Pyspark,Pyspark Dataframes,我有两张表,如下所示: 第一张表: +---+------+----------+----------+ | id|sub_id| startDate| endDate| +---+------+----------+----------+ | 2| a|2018-11-15|2018-12-01| | 2| b|2018-10-15|2018-11-01| | 3| a|2018-09-15|2018-10-01| +---+------+----------
+---+------+----------+----------+
| id|sub_id| startDate| endDate|
+---+------+----------+----------+
| 2| a|2018-11-15|2018-12-01|
| 2| b|2018-10-15|2018-11-01|
| 3| a|2018-09-15|2018-10-01|
+---+------+----------+----------+
第二张表:
+---+----------+----+
| id| date|time|
+---+----------+----+
| 2|2018-10-15|1200|
| 2|2018-10-16|1200|
| 2|2018-10-18|1200|
| 3|2018-09-28|1200|
| 3|2018-09-29|1200|
+---+----------+----+
对于特定的id和给定的startDate和endDate,我需要在给定的时间范围内过滤第二个表
从过滤表中,我要求时间列和输出的总和如下所示:
+---+------+----------+----------+---------+
| id|sub_id| startDate| endDate|totalTime|
+---+------+----------+----------+---------+
| 2| a|2018-11-15|2018-12-01| 0|
| 2| b|2018-10-15|2018-11-01| 3600|
| 3| a|2018-09-15|2018-10-01| 2400|
+---+------+----------+----------+---------+
我的目标是避免将for循环与过滤器一起使用。我尝试使用pandas_udf,但它只适用于一个数据帧。您可以在id上加入两个数据帧,然后过滤掉所需的记录。在它之后执行groupBy。但我有一个疑问,一个id是否可以有多个开始和结束日期,如第一个表所示?是的,一个id可以有多个开始日期和结束日期。这就是我无法使用join的原因。同一id是否可以有重叠的句点?例如,(ID,StaskDead,EndoDeDead)= [(2,2019-10-01,2019-10-20),(2,2019-10-05,2019-10-25)] @ ShivanshuPande,所以我们可以考虑在ID为2,min开始日期和最大结束日期为时间帧的情况下是否有一个ID的多行。对于id 2:(2018-10-15至2018-12-01)@ksgj1是的,它可以有重叠的周期