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