我在开发Apache Spark应用程序时遇到了以下问题。我有一个来自Postgresql数据库的两个数据集(D1和D2),我想用Apache Spark处理它。两者都包含一个列(ts),其中包含来自同一时期的时间戳。我想加入D2,其中D1的最大时间戳小于或等于。它可能看起来像:
D1 D2 DJOIN
|ts| |ts| |D1.ts|D2.ts|
---- ---- -------------
| 1| | 1| | 1 | 1 |
| 3| | 2| | 1 | 2 |
| 5| | 3| | 3 | 3 |
| 7| | 4| | 3 | 4 |
|11| | 5| | 5 | 5 |
|13| | 6| | 5 | 6 |
| 7| = join => | 7 | 7 |
| 8| | 7 | 8 |
| 9| | 7 | 9 |
|10| | 7 | 10 |
|11| | 11 | 11 |
|12| | 11 | 12 |
|13| | 13 | 13 |
|14| | 13 | 14 |
在SQL中,我可以简单地写一下:
SELECT D1.ts, D2.ts
FROM D1, D2
WHERE D1.ts = (SELECT max(D1.ts)
FROM D1
WHERE D1.ts <= D2.ts);
Spark数据集中存在嵌套SELECT
查询的可能性,但不幸的是它们仅支持相等=
而不支持<=
。我是Spark的初学者,目前我被困在这里。是否有人更了解如何解决这个问题?