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|
+---+-----+-----+----+
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|
+---+-----+-----+----+