如何在PySpark DataFrame中删除重名列中的第二个Id列
PySpark 删除Join后重复的同名列
当Spark DataFrame执行Join操作后出现重复的同名列(比如两个Id列),可以用这几种实用方法搞定:
1. 精准删除指定来源的重复列
如果知道重复列来自哪个原始表,直接用该表的列对象删除,这是最稳妥的方式,不会因为列顺序变化出错:
# 假设重复的Id列来自原始表df2 df = df.drop(df2.Id)
2. 通过列位置删除
要是不清楚原始表来源,但确定重复列在Schema里的位置(比如示例里第二个Id是第4列,索引从0开始算就是3),可以直接用列索引删除:
# 删除索引为3的列(也就是第二个Id) df = df.drop(df.columns[3])
3. 从根源避免重复列
最好的办法是在Join的时候就不让重复列出现,省得后续删来删去:
- 方法A:用
on参数指定关联列,这样Join后只会保留一个Id列:
# 直接指定关联列Id,自动去重 df = df1.join(df2, on="Id", how="inner")
- 方法B:先给其中一个表的
Id重命名再Join,之后按需删除重命名后的列:
# 把df2的Id改名为Id_2 df2_renamed = df2.withColumnRenamed("Id", "Id_2") # 基于重命名后的列关联 df = df1.join(df2_renamed, df1.Id == df2_renamed.Id_2) # 不需要Id_2就删掉 df = df.drop("Id_2")
内容的提问来源于stack exchange,提问作者N9909
相关产品推荐
相关产品推荐

