scala - 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 会附加。谢谢各位!
解决方案
推荐阅读
- java - 如何从 Uri 读取文本并放入 textView?安卓工作室-Java
- angular - 组件是否应该编辑来自 Angular 服务的对象副本?
- ruby-on-rails - 如何使用 Carrierwave 和 MiniMagick 编辑现有图像?
- python-3.x - Pandas MultiIndex,其中一个因素是枚举
- puppeteer - 一旦用户从登录移动到主页,如何在 puppeteer 中引用当前页面对象?
- graph - 如何使用 gremlin 查询权限图?
- tensorflow - 用于 TensorFlow 对象检测的平衡数据集
- javascript - 如何使用 ReactJS 实现真正的部分更新?
- windows-runtime - 如何获取UTC的当前时间?
- c# - .net Core Angular 6 API [FromBody] 发布时为空