【发布时间】:2018-06-26 01:44:21
【问题描述】:
我有两个 Dataframes df1(员工表)和 df2(部门表),具有以下架构:
df1.columns
// Arrays(id,name,dept_id)
和
df2.columns
// Array(id,name)
在我在 df1.dept_id 和 df2.id 上加入这两个表之后:
val joinedData = df1.join(df2,df1("dept_id")===df2("id"))
joinedData.columns
// Array(id,name,dept_id,id,name)
将其保存在文件中时,
joined.write.csv("<path>")
它给出了错误:
org.apache.spark.sql.AnalysisException: Duplicate column(s) : "name", "id" found, cannot save to file.;
我阅读了有关使用字符串序列来避免列重复的信息,但这是针对要执行连接的列。我需要为未连接的列提供类似的功能。
有没有直接的方法来嵌入重复列的表名以便保存?
我想出了一个匹配 dfs 的列并重命名重复列以将表名附加到列名的解决方案。但是有直接的方法吗?
注意:这将是一个通用代码,仅包含执行连接的列详细信息。仅在运行时才知道剩余列。所以我们不能通过硬编码来重命名列。
【问题讨论】:
-
@Vijay 请检查所有答案。
-
已检查。仍然没有可用的答案。
标签: scala apache-spark dataframe join apache-spark-sql