请说明在 PySpark 中利用 join() 方法对两个 DataFrame 进行连接的具体操作方式。
考察说明
考察候选人是否掌握 PySpark DataFrame join 的基本用法及连接类型差异。
回答思路
- 【回答框架 1】join() 是 DataFrame 的常用方法,用于根据一个或多个键将两个 DataFrame 的行合并。基本语法为 df1.join(df2, on=连接条件, how=连接类型)。连接条件可以是单个列名、列名列表或一个布尔表达式。
- 【回答框架 2】连接类型通过 how 参数指定,常见类型包括 inner、outer、left、right 和 cross。inner 只保留匹配的行;outer 保留所有行,缺失侧填充 null;left 保留左表所有行;right 保留右表所有行;cross 产生笛卡尔积。
- 【回答框架 3】当连接键列名相同时,on 可直接传列名字符串或列表;当列名不同时,应使用表达式,例如 on=df1['id'] == df2['uid']。列名相同且使用表达式时,结果中会出现重复列,可通过 select 或 drop 去除冗余。
- 【回答框架 4】连接操作的性能受数据分布、键的倾斜度和连接类型影响。应避免 cross join 无谓使用;对于大表连接,可考虑广播小表(broadcast hint)以减少 shuffle,但需评估广播大小是否适宜。
- 【关键点 1】join 的基本语法为 df1.join(df2, on=条件, how=类型)。
- 【关键点 2】常用连接类型有 inner、outer、left、right、cross。
- 【关键点 3】连接键列名不同时应使用表达式,例如 on=df1['col1']==df2['col2']。
- 【关键点 4】连接后可能出现重复列,需用 select 或 drop 清理。
- 【关键点 5】大表连接可考虑广播小表来优化性能。
- 【易错点 1】使用 cross join 会产生笛卡尔积,可能导致数据爆炸。
- 【易错点 2】连接键存在大量重复值时,结果行数可能超出预期,需确认业务逻辑。
- 【易错点 3】连接后未去重列名,后续操作可能因列名歧义而报错。