Sql 如何在pyspark中将数据拆分为组

Sql 如何在pyspark中将数据拆分为组,sql,select,pyspark,window-functions,gaps-and-islands,Sql,Select,Pyspark,Window Functions,Gaps And Islands,我需要在时间序列数据中查找组 数据样本 我需要根据值和天输出列组 我尝试过使用滞后、超前和行号,但结果一无所获。似乎每次值更改时都要增加组。如果是这样,这就是一种缺口和孤岛问题 这里有一种方法使用lag()和累计sum(): PySpark实现这一点的方法。使用lag查找组的端点,在此lag上进行增量求和以获得组,向组添加1以获得所需的组。 from pypsark.sql.window import Window from pyspark.sql import functions as F

我需要在时间序列数据中查找组

数据样本

我需要根据
输出列


我尝试过使用滞后、超前和行号,但结果一无所获。

似乎每次值更改时都要增加组。如果是这样,这就是一种缺口和孤岛问题

这里有一种方法使用
lag()
和累计
sum()


PySpark
实现这一点的方法。使用
lag
查找组的端点,在此
lag
上进行
增量求和
以获得
组,
向组添加1以获得所需的组。

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

w1=Window().orderBy("day")
df.withColumn("lag", F.when(F.lag("value").over(w1)!=F.col("value"), F.lit(1)).otherwise(F.lit(0)))\
  .withColumn("group", F.sum("lag").over(w1) + 1).drop("lag").show()

#+-----+---+-----+
#|value|day|group|
#+-----+---+-----+
#|    1|  1|    1|
#|    1|  2|    1|
#|    1|  3|    1|
#|    1|  4|    1|
#|    1|  5|    1|
#|    2|  6|    2|
#|    2|  7|    2|
#|    1|  8|    3|
#|    1|  9|    3|
#|    1| 10|    3|
#|    1| 11|    3|
#|    1| 12|    3|
#|    1| 13|    3|
#+-----+---+-----+
from pypsark.sql.window import Window
from pyspark.sql import functions as F

w1=Window().orderBy("day")
df.withColumn("lag", F.when(F.lag("value").over(w1)!=F.col("value"), F.lit(1)).otherwise(F.lit(0)))\
  .withColumn("group", F.sum("lag").over(w1) + 1).drop("lag").show()

#+-----+---+-----+
#|value|day|group|
#+-----+---+-----+
#|    1|  1|    1|
#|    1|  2|    1|
#|    1|  3|    1|
#|    1|  4|    1|
#|    1|  5|    1|
#|    2|  6|    2|
#|    2|  7|    2|
#|    1|  8|    3|
#|    1|  9|    3|
#|    1| 10|    3|
#|    1| 11|    3|
#|    1| 12|    3|
#|    1| 13|    3|
#+-----+---+-----+