如何在Apache Spark中对齐两个数据集的时间戳

时间:2016-11-14 08:06:30

标签: apache-spark apache-spark-sql

我在开发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的初学者,目前我被困在这里。是否有人更了解如何解决这个问题?

0 个答案:

没有答案