scala - spark:合并两个数据帧,如果两个数据帧中的ID重复,则df1中的行覆盖df2中的行
问题描述
有两个数据框:df1 和 df2 具有相同的架构。ID 是主键。
我需要合并两个 df1 和 df2。这可以通过union
除了一个特殊要求来完成:如果 df1 和 df2 中存在具有相同 ID 的重复行。我需要将其保留在 df1 中。
df1:
ID col1 col2
1 AA 2019
2 B 2018
df2:
ID col1 col2
1 A 2019
3 C 2017
我需要以下输出:
df1:
ID col1 col2
1 AA 2019
2 B 2018
3 C 2017
这个怎么做?谢谢。我认为可以注册两个 tmp 表,进行完全连接并使用coalesce
. 但我不喜欢这种方式,因为实际上大约有 40 列,而不是上面示例中的 3 列。
解决方案
鉴于两个 DataFrame 具有相同的架构,您可以简单地df1
与&的left_anti
连接联合:df2
df1
df1.union(df2.join(df1, Seq("ID"), "left_anti")).show
// +---+---+----+
// | ID|co1|col2|
// +---+---+----+
// | 1| AA|2019|
// | 2| B|2018|
// | 3| C|2017|
// +---+---+----+
推荐阅读
- c++ - https发布失败c ++
- selenium - 脚本突然结束时未生成范围报告
- ruby-on-rails - 在 Ruby 中汇总 JSON 中特定键的所有值
- java - ScheduledExecutorService 的限制是什么?
- heroku - 我怎样才能在heroku上滚动我自己的自动缩放?
- android - DisplayMetrics.xdpi 和 DisplayMetrics.ydpi 是否会根据屏幕方向而变化
- python - 如何将存储为字典键的数据帧连接到单个数据帧中?
- cobol - 从 cobol 中的字符串中删除特定值
- r - 在 Windows 上的 R 中使用 nvBLAS?
- java - jul-to-log4j-bridge “mvn package” 以“package org.apache.log4j.plugins 不存在”结尾 编译错误