You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark中基于Timestamp粒度添加ML模型输入索引列

解决方案

需求说明

为包含item_name、item_value、timestamp字段的表新增index列,要求相同timestamp对应相同的整数值索引,索引按timestamp升序从0开始编号。


支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server、Spark SQL等)

使用DENSE_RANK()窗口函数,为每个唯一的timestamp分配连续索引,再减1实现从0开始编号:

SELECT 
    item_name,
    item_value,
    timestamp,
    DENSE_RANK() OVER (ORDER BY timestamp) - 1 AS index
FROM your_table_name;

说明:

  • DENSE_RANK()会为相同的timestamp分配相同的排名,且排名连续无间隔
  • 减1操作将默认从1开始的排名转换为从0开始的索引

MySQL 5.x(不支持窗口函数)

使用用户变量实现索引分配:

SELECT 
    item_name,
    item_value,
    timestamp,
    @idx := CASE 
        WHEN @prev_ts = timestamp THEN @idx 
        ELSE @idx + 1 
    END - 1 AS index,
    @prev_ts := timestamp
FROM your_table_name,
     (SELECT @idx := 0, @prev_ts := NULL) AS vars
ORDER BY timestamp;

说明:

  • 通过变量@prev_ts记录上一行的timestamp,@idx记录当前索引值
  • 当当前行timestamp与上一行相同时,保持索引不变;否则索引加1
  • 最终减1让索引从0开始

执行结果

运行上述SQL后,将得到符合期望的表结构:

item_nameitem_valuetimestampindex
A0.252023-03-01T17:20:00.000+00000
B0.342023-03-01T17:20:00.000+00000
A0.302023-03-01T17:25:00.000+00001
B0.542023-03-01T17:25:00.000+00001
A0.302023-03-01T17:30:00.000+00002
B0.542023-03-01T17:30:00.000+00002

内容的提问来源于stack exchange,提问作者MMV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:23:23