Pyspark Spark Dataframe:连续具有相同结果的列的查询计数

Pyspark Spark Dataframe:连续具有相同结果的列的查询计数,pyspark,apache-spark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个仓库库存数据集,当前状态每两分钟报告一次 我想获取没有剩余库存的日期,即库存金额=0,如果该值在一段时间内保持为0,则获取库存金额为0的后续行的计数。换句话说,我想得到stock\u amount变为0的日期,然后是保持为0的次数 例如,给定以下数据 Row(date='24-06-2020 11:03:00', stock_amount = 1) Row(date='24-06-2020 11:05:00', stock_amount = 0) Row(date='24-06-2020

我有一个仓库库存数据集,当前状态每两分钟报告一次

我想获取没有剩余库存的日期,即
库存金额=0
,如果该值在一段时间内保持为0,则获取库存金额为0的后续行的计数。换句话说,我想得到
stock\u amount
变为0的日期,然后是保持为0的次数

例如,给定以下数据

Row(date='24-06-2020 11:03:00', stock_amount = 1)
Row(date='24-06-2020 11:05:00', stock_amount = 0)
Row(date='24-06-2020 11:07:00', stock_amount = 2)
Row(date='24-06-2020 11:09:00', stock_amount = 3)
Row(date='24-06-2020 16:32:00', stock_amount = 0)
Row(date='24-06-2020 16:34:00', stock_amount = 0)
Row(date='24-06-2020 16:36:00', stock_amount = 0)
Row(date='24-06-2020 16:38:00', stock_amount = 0)
Row(date='24-06-2020 16:40:00', stock_amount = 2)
结果应该是:

  (date='24-06-2020 11:05:00', count=1)
  (date='24-06-2020 16:32:00', count=4)
   (date='26-07-2020 12:05:00', count=1)
   (date='26-07-2020 12:11:00', count=1)
   (date='26-07-2020 17:32:00',  count=4)
对于这些数据

Row(date='26-07-2020 12:03:00', stock_amount = 3)
Row(date='26-07-2020 12:05:00', stock_amount = 0)
Row(date='26-07-2020 12:07:00', stock_amount = 4)
Row(date='26-07-2020 12:09:00', stock_amount = 4)
Row(date='26-07-2020 12:11:00', stock_amount = 0)
Row(date='26-07-2020 12:13:00', stock_amount = 2)
Row(date='26-07-2020 17:32:00', stock_amount = 0)
Row(date='26-07-2020 17:34:00', stock_amount = 0)
Row(date='26-07-2020 17:36:00', stock_amount = 0)
Row(date='26-07-2020 17:38:00', stock_amount = 0)
Row(date='26-07-2020 17:40:00', stock_amount = 1)
结果应该是:

  (date='24-06-2020 11:05:00', count=1)
  (date='24-06-2020 16:32:00', count=4)
   (date='26-07-2020 12:05:00', count=1)
   (date='26-07-2020 12:11:00', count=1)
   (date='26-07-2020 17:32:00',  count=4)

这可以通过窗口函数和一些分组来完成

注意:多个步骤用于更详细的说明,但可以组合在单个命令中


这可以通过窗口函数和一些分组来完成

注意:多个步骤用于更详细的说明,但可以组合在单个命令中


仍然需要一些更清晰的信息,关于它应该是2倍,因为我可以看到5倍是0。请为您的场景添加更多输入,以便为您提供帮助better@smart_coder我添加了另一个示例。我可以在第一个示例中看到0->1个实例2次,在第二个示例中看到3次??或者我可能没有足够的思考来理解你的用例。这是非常正确的。除了解决方案是找出stock_amount列何时变为0,而不是何时停止为0。还需要更清楚地说明它应该是2倍,因为我可以看到5倍是0。请为您的场景添加更多输入,以便为您提供帮助better@smart_coder我添加了另一个示例。我可以在第一个示例中看到0->1个实例2次,在第二个示例中看到3次??或者我可能没有足够的思考来理解你的用例。这是非常正确的。但解决方案是查找stock_amount列何时变为0,而不是何时停止为0。