有没有办法用最后一个有效的值替换pyspark dataframe中的null
值?如果您认为Windows分区和排序需要timestamp
和session
列,则还有其他列。更具体地说,我希望实现以下转换:
+---------+-----------+-----------+ +---------+-----------+-----------+
| session | timestamp | id| | session | timestamp | id|
+---------+-----------+-----------+ +---------+-----------+-----------+
| 1| 1| null| | 1| 1| null|
| 1| 2| 109| | 1| 2| 109|
| 1| 3| null| | 1| 3| 109|
| 1| 4| null| | 1| 4| 109|
| 1| 5| 109| => | 1| 5| 109|
| 1| 6| null| | 1| 6| 109|
| 1| 7| 110| | 1| 7| 110|
| 1| 8| null| | 1| 8| 110|
| 1| 9| null| | 1| 9| 110|
| 1| 10| null| | 1| 10| 110|
+---------+-----------+-----------+ +---------+-----------+-----------+
3条答案
按热度按时间dzhpxtsq1#
它使用
last
并忽略空值。让我们重新创建与原始数据类似的内容:
现在,让我们使用窗口函数
last
:zdwk9cvp2#
这似乎是在使用Window functions:
下面是完整的null_test.py。
jv4diomz3#
@Oleksiy
的答案很好,但并不完全符合我的要求。在一个会话中,如果观察到多个null
,则所有null
都将填充该会话的第一个非null
。我需要last非null
值来向前传播。以下调整适用于我的用例: