【发布时间】:2020-08-11 18:55:38
【问题描述】:
我有两个 spark DF 需要加入。仅从 df2 中选择 df1 中存在的值,不应重复行。
例如:
df1:
+-------------+---------------+----------+
|a |b |val |
+-------------+---------------+----------+
| 202003101750| 202003101700|1712384842|
| 202003101740| 202003101700|1590554927|
| 202003101730| 202003101700|1930860788|
| 202003101730| 202003101600| 101713|
| 202003101720| 202003101700|1261542412|
| 202003101720| 202003101600| 1824155|
| 202003101710| 202003101700| 912601761|
+-------------+---------------+----------+
df2:
+-------------+---------------+
|a |b |
+-------------+---------------+
| 202003101800| 202003101700|
| 202003101800| 202003101700|
| 202003101750| 202003101700|
| 202003101750| 202003101700|
| 202003101750| 202003101700|
| 202003101750| 202003101700|
| 202003101740| 202003101700|
| 202003101740| 202003101700|
+-------------+---------------+
我正在做以下事情:
df1.join(df2, Seq("a", "b"), "leftouter").where(col("val").isNotNull)
但是我的输出有几个重复的行。
+-------------+---------------+----------+
|a |b |val |
+-------------+---------------+----------+
| 202003101750| 202003101700|1712384842|
| 202003101750| 202003101700|1712384842|
| 202003101750| 202003101700|1712384842|
| 202003101750| 202003101700|1712384842|
| 202003101740| 202003101700|1590554927|
| 202003101740| 202003101700|1590554927|
| 202003101740| 202003101700|1590554927|
| 202003101740| 202003101700|1590554927||
+-------------+---------------+----------+
如果从 df1 中删除 val,我正在尝试实现类似操作。但是except 似乎不起作用。
例如以下是所需的操作
df1.drop(col("val")).except("df2")
df1 的架构如下:
root
|-- a: String (nullable = true)
|-- b: String (nullable = true)
|-- val: long (nullable = true)
另外,left-outer join和except之间到底有什么区别? 预期输出:
+-------------+---------------+----------+
|a |b |val |
+-------------+---------------+----------+
| 202003101750| 202003101700|1712384842|
| 202003101740| 202003101700|1590554927||
+-------------+---------------+----------+
【问题讨论】:
-
请添加您的预期输出..?
-
@Shu 添加了评论。你能看一下吗?
标签: scala apache-spark apache-spark-sql