动态填充pyspark dataframe中列中的行

动态填充pyspark dataframe中列中的行,pyspark,apache-spark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Dataframes,我想要这样的东西: Id A B Flag COL 1 5 4 0 0 1 5 8 1 1 1 6 4 0 1 1 4 7 1 2 2 7 6 0 0 2 8 9 1 1 2 3 8 1 2 我的dataframe必须基于id进行分区,我的flag基于条件(A考虑到我的不同评论,以下是我基于有效数据集的解决方案: 从pyspark.sql导入函数为F,窗口 df

我想要这样的东西:

Id  A  B  Flag  COL
 1  5  4   0     0
 1  5  8   1     1
 1  6  4   0     1
 1  4  7   1     2
 2  7  6   0     0
 2  8  9   1     1
 2  3  8   1     2

我的dataframe必须基于id进行分区,我的flag基于条件(A考虑到我的不同评论,以下是我基于有效数据集的解决方案:

从pyspark.sql导入函数为F,窗口
df.show()#如果没有列的分区和顺序,则无法计算列
+---------+-----+---+---+
|分区|顺序| A | B|
+---------+-----+---+---+
|        1|    1|  5|  4|
|        1|    2|  5|  8|
|        1|    3|  6|  4|
|        1|    4|  4|  7|
|        2|    1|  7|  6|
|        2|    2|  8|  9|
|        2|    3|  3|  8|
+---------+-----+---+---+
df.withColumn(“flag”,F.when(F.col(“A”)
您的逻辑中有一个缺陷。您没有任何排序规则。如果我洗牌您的行,我无法重新构造数据帧。您需要定义一列来对行进行排序。您好,史蒂文,逻辑是每当我将标志设为1时,我需要对“COL”的前一行值加1列,每当我得到标志为0时,我只需要与“COL”的前一行值相同的值column.yes,但是如果您的行被洗牌了怎么办?Spark会洗牌您的数据,因此使用
ID=1
的行可能会一个接一个地出现…在纸上,您的逻辑是有效的,但在dataframe中则不起作用。请显示您的真实数据,而不是您认为更简单的示例,因为它不是。Steven,我编辑了我的问题。我使用了分区方式和顺序按“ID”获取特定格式。请让我知道它现在是否有意义。更好,但仍然不起作用。对于ID=1,行没有任何顺序,因此列列的列可以根据行的顺序进行更改。它可以是
0,0,1,2
1,2,2
或任何其他组合。我们需要此新列和前一列.