首页 > 解决方案 > 如何使用 pyspark 在连接条件中使用聚合函数

问题描述

我有两个数据框,我正在尝试在 id 和 date 列上加入这两个数据框。

加入条件是这样的:

df1.join(df2, 
    (df1.id == df2.id) & 
     F.when(df1.date < df2.agg(F.min(df2.start_date)),True)
     .when(df1.date.between(df2.start_date, edf2.end_date), True)
     .otherwise(None)
     how='left'
) 

当我试图这样做时,它会抛出一个属性错误:'DataFrame' 对象没有属性'_get_object_id'

我想要的是?

样本数据:

df1: id 日期名称
          1 20190821 内
          1 20190828 罗恩
          1 20190823 梅斯
          1 20190819 杆
          1 20190701 孙

df2(查找):
         id start_date end_date group_id
          1 20190827 20301212 C
          1 20190823 20190826 C
          1 20190821 20190822 B

预期输出:

         id 日期名称 group_id
          1 20190821 内 B
          1 20190828 罗恩 C
          1 20190823 梅斯 C
          1 20190819 杆 B
          1 20190701 孙乙

如果 df1.date 小于 min df2.start_date 那么它应该选择 min df2.star_date 的 group_id 即 B

有没有有效的方法来做到这一点(数据量很大)?

标签: pysparkapache-spark-sqlpyspark-sqlpyspark-dataframes

解决方案


推荐阅读