我有一个ID为2个不同列的表。我有另一个表,其中包含与id关联的对象。我想从表2中筛选出id存在于表1的id1或id2中的id。
表1:
| id1 | id2 |
| 1 | 1 |
| 1 | 1 |
| 1 | 3 |
| 2 | 5 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
表2:
| id | obj |
| 1 | 'A' |
| 2 | 'B' |
| 3 | 'C' |
| 4 | 'D' |
| 5 | 'E' |
| 6 | 'F' |
| 7 | 'G' |
我想的是从表1中创建一个包含唯一ID的列表,该ID将是上面示例中的[1,2,3,5]。
然后根据列表过滤出Dataframe,得到结果。
| id | obj |
| 1 | 'A' |
| 2 | 'B' |
| 3 | 'C' |
| 5 | 'E' |
尽管我对解决方案的可扩展性有顾虑。列表可能很大,在某些情况下甚至可能无法加载到内存中。在这种情况下有什么建议吗?
谢谢。
3条答案
按热度按时间hfyxw5xn1#
在spark中使用sparksql-note-joins有一整套性能考虑,包括df大小、密钥分配等,所以请您熟悉一下。
一般来说:
s6fujrry2#
以下方法可行
输出
对于内存问题,您可以将数据持久化到内存和磁盘,但是有更多的选项,您可以选择适合您的特定问题的最佳选项,您可以遵循以下链接:rdd persistence
我也会通过配置来考虑分区的数量:
我也会查看此链接以了解进一步的配置:
性能调整
我希望这有帮助。
ui7jx7zq3#
另一种方法:
输出: