当您连接具有相似列名称的两个DF时:
df = df1.join(df2, df1['id'] == df2['id'])
Run Code Online (Sandbox Code Playgroud)
加入工作正常,但你不能调用id列,因为它是不明确的,你会得到以下异常:
pyspark.sql.utils.AnalysisException: "Reference 'id' is ambiguous, could be: id#5691, id#5918.;"
Run Code Online (Sandbox Code Playgroud)
这使得id不再可用......
以下函数解决了该问题:
def join(df1, df2, cond, how='left'):
df = df1.join(df2, cond, how=how)
repeated_columns = [c for c in df1.columns if c in df2.columns]
for col in repeated_columns:
df = df.drop(df2[col])
return df
Run Code Online (Sandbox Code Playgroud)
我不喜欢它的是我必须迭代列名称并删除它们为什么由一个.这看起来很笨重......
您是否知道任何其他解决方案将更优雅地加入和删除重复项或删除多个列而不迭代它们?