如何使用pyspark在连接条件下使用聚合函数

如何使用pyspark在连接条件下使用聚合函数,pyspark,apache-spark-sql,pyspark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Sql,Pyspark Dataframes,我有两个数据框,我正在尝试连接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='lef

我有两个数据框,我正在尝试连接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'
) 
df1.join(df2,
(df1.id==df2.id)和
F.when(df1.date
当我尝试这样做时,它抛出了一个属性错误:“DataFrame”对象没有属性“\u get\u object\u id”

我想要什么?

Sample data: df1: id date name 1 20190821 Ney 1 20190828 Ron 1 20190823 Mes 1 20190819 Rod 1 20190701 Sun df2(lookup): id start_date end_date group_id 1 20190827 20301212 C 1 20190823 20190826 C 1 20190821 20190822 B Expected output: id date name group_id 1 20190821 Ney B 1 20190828 Ron C 1 20190823 Mes C 1 20190819 Rod B 1 20190701 Sun B 样本数据: df1:id日期名称 1 20190821 Ney 1 20190828罗恩 120190823人工编码站 1 20190819杆 1 20190701太阳 df2(查找): id开始日期结束日期组id 1 20190827 20301212 C 1 20190823 20190826 C 1 20190821 20190822 B 预期产出: id日期名称组\u id 1 20190821 Ney B 1 20190828罗恩C 1 20190823 Mes C 1 20190819杆B 1 20190701太阳B 如果df1.date小于min df2.start_date,则应选择min df2.star_date的组id,即B


有什么有效的方法可以做到这一点(数据量很大)?

您不能在
join
中使用聚合函数。你几乎肯定可以用不同的方法达到你想要的结果,但是很难说没有看到。嘿,pault,用样本记录和我想要的输出更新了问题。