我有如下数据:
Status Order
NULL 1
NULL 2
1 3
NULL 4
NULL 5
0 6
NULL 7
NULL 8
NULL 9
1 10
我正在尝试添加一个新列,该列用以前的数字填充空值,例如:
Status New
NULL NULL
NULL NULL
1 1
NULL 1
NULL 1
0 0
NULL 0
NULL 0
NULL 0
1 1
我正在使用hive,并且确实可以访问pyspark,但是在可能的情况下尝试通过SQL解决。我研究了窗口函数(Rank,Dense_rank,Row_number,Lag,Lead)。有什么建议么?
答案 0 :(得分:1)
您需要的是对等组。然后,您可以使用窗口功能来填写数据。可以将组定义为直到包含给定值的非空值的数量。
这假定您有指定顺序的列。
所以:
select t.*, max(status) over (partition by grp) as new_status
from (select t.*, count(status) over (order by ?) as grp
from t
) t;
?
用于指定顺序的列。