如何使用pyspark在连接条件下使用聚合函数
我有两个数据框,我正在尝试连接id和date列上的两个数据框 联接条件如下所示:如何使用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
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,用样本记录和我想要的输出更新了问题。