Scala Spark中用Full Join连接DataFrame如何避免重复键列
问题描述
现有两个DataFrame,结构与数据如下:
# Dataframe1 a x 1 2 3 4 2 5 # Dataframe2 a y 1 3 3 5 7 6
期望生成包含所有行的新DataFrame,结构如下:
a x y 1 2 3 3 4 5 2 5 NaN 7 NaN 6
尝试使用Join操作后出现两个连接键列(a列重复),如何解决?
解决方案
你需要用**外连接(outer join)**保留两个DataFrame中所有的a值,同时避免重复的连接键列。以pandas为例,直接使用merge()方法并指定on='a'参数即可,它会自动合并相同的键列,不会产生重复:
import pandas as pd # 构造示例数据 df1 = pd.DataFrame({'a': [1, 3, 2], 'x': [2, 4, 5]}) df2 = pd.DataFrame({'a': [1, 3, 7], 'y': [3, 5, 6]}) # 执行外连接,合并到同一a列 result_df = pd.merge(df1, df2, on='a', how='outer') print(result_df)
执行后输出的结果就是你期望的结构:
a x y 0 1 2.0 3.0 1 3 4.0 5.0 2 2 5.0 NaN 3 7 NaN 6.0
重复键列的原因
如果你的代码中使用了left_on='a'和right_on='a'但未指定on,或是用join()方法时未对齐索引,就会生成带后缀的重复键列(比如a_x和a_y)。而merge(df1, df2, on='a')会直接将同名键列合并为一列,配合how='outer'就能保留所有行。
内容的提问来源于stack exchange,提问作者Maitri Vora
相关产品推荐
相关产品推荐

