PySpark左连接时设置列别名,避免重复列名选取
解决DataFrame左连接后重复列的问题
针对左连接后出现重复languages_id列的问题,提供两种直接的解决方法(基于PySpark语法):
方法1:仅保留一个languages_id列
左连接时左表已包含languages_id,右表的该列属于冗余数据,直接在连接前排除右表的languages_id即可:
# 仅保留左表的languages_id,右表不选取该列 temp_join = ldt_ffw_course_attendee[["languages_id","course_attendee_status", "course_attendee_completed_flag","course_video_id","mem_id", "course_id"]].join( languages.drop("languages_id"), # 移除右表的languages_id列 ldt_ffw_course_attendee.languages_id == languages.languages_id, "left" )
如果右表还有其他需要保留的字段,只选择所需字段、排除languages_id即可:
# 选取右表其他需要的字段,排除languages_id temp_join = ldt_ffw_course_attendee[["languages_id","course_attendee_status", "course_attendee_completed_flag","course_video_id","mem_id", "course_id"]].join( languages.select("other_field1", "other_field2"), # 替换为实际需要的字段 ldt_ffw_course_attendee.languages_id == languages.languages_id, "left" )
方法2:为右表的languages_id设置别名
如果需要区分左右表的languages_id(比如排查匹配异常),可以在选取右表列时用alias()重命名:
# 为右表的languages_id设置别名 temp_join = ldt_ffw_course_attendee[["languages_id","course_attendee_status", "course_attendee_completed_flag","course_video_id","mem_id", "course_id"]].join( languages.select(languages.languages_id.alias("languages_id_right")), # 重命名为别名 ldt_ffw_course_attendee.languages_id == languages.languages_id, "left" )
连接后,原左表的列仍为languages_id,右表的列变为languages_id_right,不会再出现重复列。
内容的提问来源于stack exchange,提问作者Death Metal
相关产品推荐
相关产品推荐

