我有两个帧,DF 1和DF 2。DF 1是主帧,DF 2是增量帧。来自DF 2的数据应该插入DF 1或用于更新DF 1的数据。
假设DF 1是以下格式:
| ID_no|开始日期|量|天|
| --|--|--|--|
| 1 |2016-01-01 2016-01-01| 4650 | 22 |
| 2 |2016-01-02 2016-01-02| 3130 | 45 |
| 1 |2016-01-03 2016-01-03| 4456 | 22 |
| 2 |2016-01-15 2016-01-15 2016-01-15| 1234 | 45 |
DF 2包含以下内容:
| ID_no|开始日期|量|天|
| --|--|--|--|
| 1 |2016-01-01 2016-01-01| 8650 | 52 |
| 2 |2016-01-02 2016-01-02| 7130 | 65 |
| 1 |2016-01-06 2016-01-06| 3456 | 20 |
| 2 |2016-01-20 2016-01-20| 2345 | 19 |
| 3 |2016-02-02 2016 -02-02| 1345 | 19 |
我需要合并的两个字符串,这样,如果“id_no”和“start date”的DF 2匹配DF 1,它应该被替换在DF 1,如果不匹配,它应该被插入到DF 1。“id_no”不是唯一的。
预期结果:
| ID_no|开始日期|量|天|
| --|--|--|--|
| 1 |2016-01-01 2016-01-01| 8650 | 52 |
| 2 |2016-01-02 2016-01-02| 7130 | 65 |
| 1 |2016-01-03 2016-01-03| 4456 | 22 |
| 2 |2016-01-15 2016-01-15 2016-01-15| 1234 | 45 |
| 1 |2016-01-06 2016-01-06| 3456 | 20 |
| 2 |2016-01-20 2016-01-20| 2345 | 19 |
| 3 |2016-02-02 2016 -02-02| 1345 | 19 |
3条答案
按热度按时间s6fujrry1#
您可以在
id_no
和start_date
上连接两个 Dataframe ,然后coalesce
连接amount
和days
列,df2
的列先连接:字符串
如果你有更多的列:
型
w8ntj3qf2#
union
和后续的agg
将工作。字符串
acruukt93#
如果你正在使用Databricks Delta Lake表,你可以使用SQL的
MERGE INTO
:将基于源表的一组更新、插入和删除操作合并到目标Delta表中。
仅Delta Lake表支持此语句。
您只需要创建一个
new_id
,它是id_no
和start_date
的联接。字符串