我试图在一个不规则的时间序列中得到一个我的专栏的滞后。数据如下
time stamp (seconds), temperature
1, 20
4,12
6,13
7,18
新数据集应如下
time stamp (seconds), temperature, lagged_1_temperature
1, 20,0
4,12,0
6,13,0
7,18,13
正如所见,最后一行的延迟是非零。
对于典型的延迟,我在我的spark应用程序中使用了下面的hive查询。
"select timestamp, value ,lag(
值,1) OVER (ORDER BY timestamp) as lagged_1_value"
我可以更改上面的配置单元查询,以便为我提供我想要的结果
答案 0 :(得分:1)
您可以使用case
表达式执行此操作。
select t.*,
case when timestmp-coalesce(lag(timestmp,1) over(order by timestmp),0)=1
then coalesce(lag(temperature,1) over(order by timestmp),0)
else 0 end as lagged_1_termperature
from t
答案 1 :(得分:0)
简单的left join
可能更有效:
select t.*,
coalesce(tprev.value, 0) as prev_value
from t left join
t tprev
on tprev.timestmp = t.timestmp - 1;