给定两个 Dataframe ,我需要根据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()
1条答案
按热度按时间mefy6pfw1#
让我们尝试使用spark sql进行范围连接
创建数据库表
范围联接,然后删除不需要的列
输出量