在 PySpark 中连接两个数据框时避免列重复列名

Posted

技术标签:

【中文标题】在 PySpark 中连接两个数据框时避免列重复列名【英文标题】:Avoiding column duplicate column names when joining two data frames in PySpark 【发布时间】:2017-02-03 13:47:34 【问题描述】:

我有以下代码:

from pyspark.sql import SQLContext
ctx = SQLContext(sc)
a = ctx.createDataFrame([("1","a",1),("2","a",1),("3","a",0),("4","a",0),("5","b",1),("6","b",0),("7","b",1)],["id","group","value1"])
b = ctx.createDataFrame([("1","a",8),("2","a",1),("3","a",1),("4","a",2),("5","b",1),("6","b",3),("7","b",4)],["id","group","value2"])
c = a.join(b,"id")
c.select("group")

它返回一个错误:

pyspark.sql.utils.AnalysisException: Reference 'group' is ambiguous, could be: group#1406, group#1409.;

问题是c有两次相同的列"group"

>>> c.columns
['id', 'group', 'value1', 'group', 'value2']

例如,我希望能够做到c.select("a.group"),但我不知道如何在进行连接时自动调整列名。

【问题讨论】:

【参考方案1】:

只需删除引号:c.select(a.group),它将从 a 数据框中选择 group 列。

【讨论】:

以上是关于在 PySpark 中连接两个数据框时避免列重复列名的主要内容,如果未能解决你的问题,请参考以下文章

熊猫:连接数据框时如何聚合两个列表列

Pyspark 与 AWS Glue 在多个列上加入创建重复项

Pyspark:内部连接两个 pyspark 数据帧并从第一个数据帧中选择所有列,从第二个数据帧中选择几列

读入火花数据框时如何从csv文件中删除列

为啥在 pyspark 中加入两个临时视图后删除列不起作用,但它适用于数据框连接?

Pyspark:检查数组类型列是不是包含列表中的值[重复]