如何在presto的大数据集上使用线性插值来插值时间序列数据?

xt0899hw  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(810)

我正在处理大型数据集,使用prestodb作为查询引擎,hive作为连接外部存储的元存储。下面是我的场景的细节:
我有一个带有时间序列数据(时间戳)和数字列的数据集。我想用插值技术来填充缺失的值。例如输入数据集:


执行操作后,输出应如下所示:


一个简单的解决方案是使用pandas并插值所有值,但在内存中加载数百万行不是一个好方法。类似地,presto不支持分页。
实现上述场景的最佳方法是什么?

gev0vcfq

gev0vcfq1#

基本上,你可以使用 lag(ignore nulls) / lead(ignore nulls) 以及一些插值算法:

select t.*,
       coalesce(t.pressure,
                (time_ms - prev_time_ms) * (next_pressure - prev_pressure) / (next_time_ms - prev_time_ms)
               ) as imputed_pressure
from (select t.*,
             to_milliseconds(time) as time_ms
             lag(pressure ignore nulls) over (order by time) as prev_pressure,
             lag(to_milliseconds(time)  ignore nulls) over (order by time) as prev_time_ms,
             lag(pressure ignore nulls) over (order by time) as next_pressure,
             lag(to_milliseconds(time)  ignore nulls) over (order by time) as next_time_ms
     from t
    ) t

相关问题