这是sql中的逻辑:
coalesce(if effc_dt <= tran_dt select(max of effc_dt) , if effc_dt >= tran_dt select (min of effc_dt))
我想在pyspark中有类似的逻辑,当 effc date
小于 tran date
它将选择 effc date
最接近 tran date
如果不存在较小的日期,它将检查较大的日期并选择 effc date
最接近 tran date
.
输入Dataframe:
|id|tran_date |effc_date |
|--|-----------|-----------|
|12|2020-02-01 |2019-02-01 |
|12|2020-02-01 |2018-02-01 |
|34|2020-02-01 |2021-02-15 |
|34|2020-02-01 |2020-02-15 |
|40|2020-02-01 |2019-02-15 |
|40|2020-02-01 |2020-03-15 |
预期产量:
|id|tran_date |effc_date |
|--|-----------|-----------|
|12|2020-02-01 |2019-02-01 |
|34|2020-02-01 |2020-02-15 |
|40|2020-02-01 |2019-02-15 |
1条答案
按热度按时间s5a0g9ez1#
您可以按id和事务日期分组,然后合并条件聚合: