【问题标题】:How to interpolate Time series data using Linear interpolation on big datasets in Presto?如何在 Presto 的大数据集上使用线性插值对时间序列数据进行插值?
【发布时间】:2020-10-19 16:31:38
【问题描述】:

我正在处理使用 prestodb 作为查询引擎和 Hive 作为元存储与外部存储链接的大型数据集。以下是我的场景的详细信息:

我有一个包含时间序列数据(时间戳)和一个数字列的数据集。我想使用插值技术填充缺失值。例如 输入数据集:

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

一个更简单的解决方案是使用 pandas 并插入所有值,但在内存中加载数百万行并不是一个好方法。同样presto不支持分页。

实现上述场景的最佳方法是什么?

【问题讨论】:

    标签: sql pandas interpolation presto


    【解决方案1】:

    基本上,您可以使用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
    

    【讨论】:

    • 我已经通过进一步改进尝试了上述方法。我面临的唯一问题是 IGNORE NULLS 不适用于 LEAD 和 LAG 函数。任何解决方法或解决方案?
    • 这样的简单查询效果不佳:SELECT lead(iws) IGNORE NULLS over () as next_iws FROM TSDS_104
    • @WAnjum 。 . .这很奇怪。 Presto 表示它支持该选项:prestodb.io/docs/current/functions/window.html.
    • 是的,我检查了他们的文档,它支持 RESPECT、IGNORE NULLS,但它对我不起作用。看来我也需要在 git 上创建一张票。
    • 问题与 Presto 版本 0.231 有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多