动态填充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
或任何其他组合。我们需要此新列和前一列.