在时间戳pyspark的值后面添加索引

46scxncf  于 2023-03-11  发布在  Spark
关注(0)|答案(1)|浏览(128)

我有一个带有item_name,item_value和时间戳的表。我需要向表中再添加一列,它将用作ml模型输入的索引。我们有时间戳粒度为5分钟的值。这是我当前拥有的表

| item_name | item_value | timestamp |
|:---- |:------:| -----:|
|  A | 0.25    | 2023-03-01T17:20:00.000+0000 |
|  B | 0.34    | 2023-03-01T17:20:00.000+0000 |
|  A | 0.30    | 2023-03-01T17:25:00.000+0000 |
|  B | 0.54    | 2023-03-01T17:25:00.000+0000 |
|  A | 0.30    | 2023-03-01T17:30:00.000+0000 |
|  B | 0.54    | 2023-03-01T17:30:00.000+0000 |

我想像这样向表中添加一个名为index的列

| item_name | item_value | timestamp | index |
|:---- |:------:| -----:| -----:|
|  A | 0.25    | 2023-03-01T17:20:00.000+0000 |0|
|  B | 0.34    | 2023-03-01T17:20:00.000+0000 |0|
|  A | 0.30    | 2023-03-01T17:25:00.000+0000 |1|
|  B | 0.54    | 2023-03-01T17:25:00.000+0000 |1|
|  A | 0.30    | 2023-03-01T17:30:00.000+0000 |2|
|  B | 0.54    | 2023-03-01T17:30:00.000+0000 |2|

任何帮助将不胜感激!

5vf7fwbs

5vf7fwbs1#

您可以将Window函数与dense_rank一起使用,通过执行以下操作来实现它,

import pyspark.sql.functions as F
from pyspark.sql import Window

w = Window().orderBy(F.col('timestamp'))

df = df.withColumn('idx', (F.dense_rank().over(w) - 1))

df.show(truncate=False)

输出:

+---------+----------+----------------------------+---+
|item_name|item_value|timestamp                   |idx|
+---------+----------+----------------------------+---+
|A        |0.25      |2023-03-01T17:20:00.000+0000|0  |
|B        |0.34      |2023-03-01T17:20:00.000+0000|0  |
|A        |0.3       |2023-03-01T17:25:00.000+0000|1  |
|B        |0.54      |2023-03-01T17:25:00.000+0000|1  |
|A        |0.3       |2023-03-01T17:30:00.000+0000|2  |
|B        |0.54      |2023-03-01T17:30:00.000+0000|2  |
+---------+----------+----------------------------+---+

相关问题