我在pyspark作业中有一个看起来像这样的数据集:
frame_id direction_change
1 False
2 False
3 False
4 True
5 False
我想为每一行添加一个“轨道”计数器,以便方向更改之间的所有帧具有相同的值。例如,我想要的输出如下所示:
frame_id direction_change track
1 False 1
2 False 1
3 False 1
4 True 2
5 False 2
我已经能够通过以下动作与Pandas一起做到这一点:
frames['track'] = frames['direction_change'].cumsum()
但是在Spark数据框架中找不到相同的方法。 任何帮助都会非常感激。
答案 0 :(得分:2)
长话短说在PySpark中没有有效的方法可以单独使用DataFrames
。人们可能会想要使用这样的窗口函数:
from pyspark.sql.functions import col, sum as sum_
from pyspark.sql.window import Window
w = Window().orderBy("frame_id")
df.withColumn("change", 1 + sum_(col("direction_change").cast("long")).over(w))
但这种效率低下并且不会失败。可以使用How to compute cumulative sum using Spark中显示的较低级API,但在Python中,它需要移出Dataset
/ Dataframe
API并使用普通RDD。