Pyspark - 联合两个基于相同 id 的具有相同列的数据框

Pyspark - Union two data frames with same column based n same id

DF1

Id Name Desc etc
A Name1 desc1 etc1
B name2 desc2 etc2

DF2

Id Name Desc etc
A Name2 desc2 etc2
C name2 desc2 etc2

我想将 DF2 中的记录合并到 ID 相同的 DF1 中,并包括 DF1 中的所有记录。

结果DF

Id Name Desc etc
A Name1 desc1 etc1
B name2 desc2 etc2
A name2 desc2 etc2

最好的方法是什么?任何帮助表示赞赏。

您可以通过 semi join keeping only the ids in df2 which exists in df1, followed by a union 和 df1 来做到这一点。

d1 = [
    ('A', 'Name1', 'desc1', 'etc1'),
    ('B', 'name2', 'desc2', 'etc2'),
  ]

d2 = [
    ('A', 'Name2', 'desc2', 'etc2'),
    ('C', 'name2', 'desc2', 'etc2'),
]

df1 = spark.createDataFrame(d1, ['Id', 'Name', 'Desc', 'etc'])
df2 = spark.createDataFrame(d2, ['Id', 'Name', 'Desc', 'etc'])

df2.join(df1, on='Id', how='semi').union(df1).show()

+---+-----+-----+----+
| Id| Name| Desc| etc|
+---+-----+-----+----+
|  A|Name2|desc2|etc2|
|  A|Name1|desc1|etc1|
|  B|name2|desc2|etc2|
+---+-----+-----+----+