Dataframe 在pyspark数据帧中生成序列,以便在null之后找到值时该序列递增

Dataframe 在pyspark数据帧中生成序列,以便在null之后找到值时该序列递增,dataframe,pyspark,sequence,Dataframe,Pyspark,Sequence,我有一个时间序列数据,如下所示。我只需要为“低”值生成序列列。此外,仅当“模式”值发生变化时,序列才应增加 我正在尝试使用pyspark来实现这一点。想法或实际代码的实现将非常感谢 谢谢, 纳什。在使用SQL之前,我已经做过类似的事情,并将其转换为Spark SQL,如果您对此没有异议,那么创建一个临时视图->Spark.SQL,然后返回到一个数据帧就足够容易了。我相信它也很容易在Pyspark中完成 df.createOrReplaceTempView("data") #

我有一个时间序列数据,如下所示。我只需要为“低”值生成序列列。此外,仅当“模式”值发生变化时,序列才应增加

我正在尝试使用pyspark来实现这一点。想法或实际代码的实现将非常感谢

谢谢,
纳什。

在使用SQL之前,我已经做过类似的事情,并将其转换为Spark SQL,如果您对此没有异议,那么创建一个临时视图->Spark.SQL,然后返回到一个数据帧就足够容易了。我相信它也很容易在Pyspark中完成

df.createOrReplaceTempView("data") # Name your temp view
query = """
SELECT time, temp, pressure, mode, CASE WHEN mode='Low' THEN sequence ELSE NULL END FROM (
  SELECT *
  , SUM(increment) OVER(order by time) as sequence
  FROM (
  Select *
  , CASE WHEN mode!='Low' and LEAD(mode) OVER(order by time) != 'Low' THEN 0
    WHEN mode='Low' AND lag(mode) OVER(order by time) = 'Low' then 0
    WHEN SUM(CASE WHEN mode='Low' THEN 1 ELSE 0 END) over(order by time) > 0 THEN 1 ELSE 0 END  as increment -- Don't want to start incrementing if there aren't any "lows" yet, like rows 1 and 2 in your table
    FROM data -- the name of your temp view
  )
)
"""
dfSequence = spark.sql(query)
在上面的查询中,根据上面提供的示例,如果模式不是“null”,则序列=null