首页 > 解决方案 > Spark - 如果主键匹配,则更新目标数据?

问题描述

如果使用 spark 满足特定条件而不将目标读入数据帧,是否可以覆盖目标中的记录?例如,我知道如果将两组数据都加载到数据框中,我们可以做到这一点,但我想知道是否有一种方法可以在不将目标加载到数据框的情况下执行此操作。基本上,一种指定覆盖/更新条件的方法。

我猜不是,但我想在我深入这个项目之前我会问。我知道我们有追加和覆盖的写入选项。我真正想要的是,如果数据目标中已经存在一些特定列,则覆盖它并用新数据填充其他列。例如:

文件1:

id,name,date,score
1,John,"1-10-17",35
2,James,"1-11-17",43

文件2:

id,name,date,score
3,Michael,"1-10-17",23
4,James,"1-11-17",56
5,James,"1-12-17",58

我希望结果如下所示:

id,name,date,score
1,John,"1-10-17",35
3,Michael,"1-10-17",23
4,James,"1-11-17",56
5,James,"1-12-17",58

基本上,在这种情况下,名称和日期列就像主键一样。我希望根据这两个匹配的列进行更新,否则创建一个新记录。如您所见,id 4 覆盖了 id 2,但由于日期列不匹配,id 5 会附加。谢谢各位!

标签: scalaapache-sparkpyspark

解决方案


推荐阅读