【发布时间】:2021-06-03 14:59:14
【问题描述】:
我有几个表,我想根据另一个表中是否存在两列来过滤其中一个表中的行。各表数据如下
Table1:一个哈希值可以关联多篇文章;一篇文章可以关联多个哈希
| User Hash | Article Name |
|---|---|
| Hash1 | Article1 |
| Hash1 | Article2 |
| Hash2 | Article1 |
| Hash3 | Article3 |
Table2 : 每个用户哈希都与一个用户 ID 唯一关联
| User Hash | User ID |
|---|---|
| Hash1 | ID1 |
| Hash2 | ID2 |
| Hash3 | ID3 |
表 3:每个文章名称都与文章编号唯一关联
| Article Name | Article number |
|---|---|
| Article1 | Number1 |
| Article2 | Number2 |
| Article3 | Number3 |
表4
| User ID | Article Number | OtherField |
|---|---|---|
| ID1 | Number1 | Misc1 |
| ID2 | Number2 | Misc2 |
| ID3 | Number3 | Misc3 |
我想在表 4 中保留组合(用户 ID、文章编号)存在于表 1 中的行(作为用户哈希和文章名称)。所以在这个例子中,我想得到以下结果:
| User ID | Article Number | OtherField |
|---|---|---|
| ID1 | Number1 | Misc1 |
| ID3 | Number3 | Misc3 |
在 Spark SQL 中执行此操作的最佳方法是什么?我已经尝试过使用 JOIN,但我正在为有两个条件而苦苦挣扎,我希望这两个条件都在一行中有效。
在我的示例中,ID2 和 Number2 都在 Table1 中,但不在同一行,所以我想从 Table4 中过滤掉这一行。
我希望问题足够清楚。提前致谢!
【问题讨论】:
-
如果您已经将数据框转换为表,您应该考虑使用 SQL 的 EXISTS 子查询进行过滤。
标签: sql apache-spark join apache-spark-sql filtering