PySpark两种Full Outer Join实现方式的差异及文档依据咨询
PySpark两种Full Outer Join输出差异的原因及文档说明
差异原因
1. 布尔表达式作为连接条件(users1_df.email == users2_df.email)
这种方式属于自定义连接条件,Spark仅根据布尔表达式判断行是否匹配,不会对参与条件的email列做合并处理:
- 结果中会同时保留两个DataFrame的
email列(通常显示为email和email_1); - Full Outer Join场景下,当某一侧无匹配行时,对应DataFrame的
email列会显示为空值(比如users1_df存在某email但users2_df没有,结果中users2_df的email列就为空)。
2. 指定列名作为连接键(on='email')
这种方式是Spark针对同名连接键提供的简化语法:
- Spark会自动将两个DataFrame中同名的
email列识别为连接键,结果里仅保留一份email列; - Full Outer Join时,该列会整合两侧所有非空email值:匹配行使用共同的email值,不匹配行直接保留存在的那一侧的email值,因此不会出现空值。
文档中的说明位置
在PySpark官方文档的pyspark.sql.DataFrame.join章节中,关于on参数的描述明确了两种用法的差异:
- 如果
on是字符串或字符串列表:指定的列必须同时存在于两个DataFrame中,结果里只会保留这些列的一份副本,而非来自两个DataFrame的重复列。- 如果
on是布尔表达式:仅作为连接匹配的判断条件,结果会保留两个DataFrame的所有列,包括参与条件的列。
内容的提问来源于stack exchange,提问作者ng.newbie
相关产品推荐
相关产品推荐

