在 pyspark DataFrame 中创建日期范围

Create a range of dates in a pyspark DataFrame

我有如下抽象的DataFrame(我原来的DF有600亿行+)

Id    Date          Val1   Val2
1     2021-02-01    10     2
1     2021-02-05    8      4
2     2021-02-03    2      0
1     2021-02-07    12     5
2     2021-02-05    1      3

我的预期输出是:

Id    Date          Val1   Val2
1     2021-02-01    10     2
1     2021-02-02    10     2
1     2021-02-03    10     2
1     2021-02-04    10     2
1     2021-02-05    8      4
1     2021-02-06    8      4
1     2021-02-07    12     5
2     2021-02-03    2      0
2     2021-02-04    2      0
2     2021-02-05    1      3

基本上,我需要的是:如果Val1Val2在一段时间内发生变化,这两个日期之间的所有值必须具有前一个日期的值。 (更清楚,看ID 2)。

我知道我可以通过多种方式做到这一点(window 函数、udf、...)但我的疑问是,由于我的原始 DF 有超过 600 亿行,最好的方法是什么做这个处理?

我认为最好的方法 (performance-wise) 是执行内部联接(可能使用广播)。如果你担心记录的数量,我建议你 运行 按批处理(可以是记录的数量,也可以是按日期,甚至是随机数)。总体思路就是避免一下子 运行ning。