首页 > 解决方案 > 在连接数据框结果中显示用作键连接的两列

问题描述

我有以下简单的加入:

df_join = (df1.join(df2, on=['key'], how='left').select(df1['key'], df2['key']))

它返回以下错误Attribute(s) with the same name appear in the operation

我知道我不能显示两个具有相同名称的列,但在这种情况下我会这样做。

标签: pysparkdatabricks

解决方案


您可以为其中任何一个指定别名

df_join = df1.join(df2, on=['key'], how='left')\
                 .select(
                   df1['key'], df2['key'].alias('right_key')
                 )

例子 -

input_str1 = """
|a|100
|b|100
|c|100
""".split("|")

input_values1 = list(map(lambda x:x.strip(),input_str1))[1:]

input_list1 = [(x,y) for x,y in zip(input_values1[0::2],input_values1[1::2])]

sparkDF1 = sql.createDataFrame(input_list1,['id','value'])

input_str2 = """
|a|20    |2020-01-02 01:30
|a|50    |2020-01-02 05:30
|b|50    |2020-01-15 07:30
|b|80    |2020-02-01 09:30
|c|50    |2020-02-01 09:30
""".split("|")

input_values2 = list(map(lambda x:x.strip(),input_str2))[1:]

input_list2 = [(x,y,z) for x,y,z in zip(input_values2[0::3],input_values2[1::3],input_values2[2::3])]

sparkDF2 = sql.createDataFrame(input_list2,['id','value','timestamp'])

finalDF = (sparkDF1.join(sparkDF2
                        ,sparkDF1['id'] == sparkDF2['id']
                        ,'inner'
                       ).select(sparkDF2["*"],sparkDF2['id'].alias('id_right')))

finalDF.show()

+---+-----+--------+
| id|value|id_right|
+---+-----+--------+
|  c|  100|       c|
|  b|  100|       b|
|  b|  100|       b|
|  a|  100|       a|
|  a|  100|       a|
+---+-----+--------+


推荐阅读