PySpark - 按时间间隔加入数据帧

时间:2018-01-23 14:03:05

标签: python join pyspark left-join spark-dataframe

我有两个数据帧

df_fruit= spark.createDataFrame([("Apple", "10:00"),("Orange", "12:35"),("Apple", "11:36"),("Apple","12:48"),("Pear","11:00")], ["Fruit", "Time"])

此数据框存储何时应该吃水果。

我还有一个额外的数据框,可以存储一个人吃水果的时间,以及摄入了多少cals和kg's。

df_calories= spark.createDataFrame([("Apple", "10:02", "86g", "1cal"),("Orange", "12:39", "75g", "14cal"),("Apple", "10:04", "9g", "47cal"),("Apple","12:46", "25g", "9cal"),("Orange","12:33", "75g", "2cal")], ["Fruit", "Time", "Weight", "Calories"])

我需要通过Fruit加入两个表,但也需要5分钟的时间间隔。由于摄入灵活5分钟,从推荐时间开始。

这是预期的结果。

+------+-----+-----+------+--------+
| Fruit| Time| Time|Weight|Calories|
+------+-----+-----+------+--------+
| Apple|10:00|10:02|   86g|    1cal|
| Apple|10:00|10:04|    9g|   47cal|
|Orange|12:35|12:39|   75g|   14cal|
|Orange|12:35|12:33|   75g|    2cal|
| Apple|11:36| null|  null|    null|
| Apple|12:48|12:46|   25g|    9cal|
|  Pear|11:00| null|  null|    null|
+------+-----+-----+------+--------+

联接类型应为左联接,即必须保留所有df_fruit

1 个答案:

答案 0 :(得分:2)

假设时间间隔固定为5分钟,我们可以为df_fruit中的每个水果创建开始时间和结束时间,并将它们加入,

mtch.Item(0).Value

希望这有帮助!