PySpark内连接是否保留第一个数据集的重复项?附案例
PySpark内连接与目标结果实现方案
1. 内连接是否保留第一个数据集的重复项?
会保留。只要左表(DF1)里的重复行在右表(DF2)能找到匹配的关联键(这里是Name字段),内连接就会完整保留这些重复项。比如DF1中存在5条A的记录,因为DF2里有A,所以每条A都会和DF2的A完成匹配,最终全部出现在结果中,不会被去重。
2. 哪种连接方式能得到目标结果?
有两种符合要求的连接方式:
- 内连接(Inner Join):将DF1和DF2按
Name字段做内连接,会筛选出DF1中Name存在于DF2的所有行,同时保留DF1的重复项,结果和你给出的目标完全一致。
代码示例:result_df = df1.join(df2, on="Name", how="inner") - 半连接(Semi Join):半连接仅返回左表(DF1)中存在于右表(DF2)的行,不会带入右表的列,同样会保留DF1的重复项,结果也满足需求。
代码示例:result_df = df1.join(df2, on="Name", how="semi")
如果只是需要筛选符合条件的行,两种方式都适用;如果后续需要用到右表的其他字段(本次场景中没有),内连接的灵活性更高。
内容的提问来源于stack exchange,提问作者Gravity Boy
相关产品推荐
相关产品推荐

