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|
#+-----+---+-----+