【发布时间】:2022-09-27 12:05:41
【问题描述】:
给定两个数据框,我需要根据df1 中相似ID 的范围过滤df2 中的记录。我想知道是否有比下面显示的幼稚方法更好(更快)的方法。在我的用例中,df1 有 1 亿条记录,df2 有超过 10 亿条记录。
df1 = spark.createDataFrame(pd.DataFrame([[\"A\",10,20],[\"B\",5,8]],
columns=[\"id\",\"start_dt_int\",\"end_dt_int\"]))
df2 = spark.createDataFrame(pd.DataFrame([[\"A\",15],[\"A\",25],[\"B\",9]],
columns=[\"id\",\"enc_dt_int\"]))
comb = [df1.id==df2.id, df1.start_dt_int<=df2.enc_dt_int, df2.enc_dt_int<=df1.end_dt_int]
df2.join(df1, on=comb, how=\"leftsemi\").show()
-
我认为您也可以通过 LEFT join 和 SELECT like \'df2.*\' 来实现这一点。但是,LEFTSEMI 效率更高,然后 LEFT 只加入。这对您来说可能是一个重要因素,因为您正在处理大量数据