在 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
基本上,我需要的是:如果Val1
或Val2
在一段时间内发生变化,这两个日期之间的所有值必须具有前一个日期的值。 (更清楚,看ID 2)。
我知道我可以通过多种方式做到这一点(window 函数、udf、...)但我的疑问是,由于我的原始 DF 有超过 600 亿行,最好的方法是什么做这个处理?
我认为最好的方法 (performance-wise) 是执行内部联接(可能使用广播)。如果你担心记录的数量,我建议你 运行 按批处理(可以是记录的数量,也可以是按日期,甚至是随机数)。总体思路就是避免一下子 运行ning。
我有如下抽象的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
基本上,我需要的是:如果Val1
或Val2
在一段时间内发生变化,这两个日期之间的所有值必须具有前一个日期的值。 (更清楚,看ID 2)。
我知道我可以通过多种方式做到这一点(window 函数、udf、...)但我的疑问是,由于我的原始 DF 有超过 600 亿行,最好的方法是什么做这个处理?
我认为最好的方法 (performance-wise) 是执行内部联接(可能使用广播)。如果你担心记录的数量,我建议你 运行 按批处理(可以是记录的数量,也可以是按日期,甚至是随机数)。总体思路就是避免一下子 运行ning。