如何解决动态填充pyspark数据框中的列中的行
我想要这样的东西:
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
我有必须根据id进行分区的数据帧,并且我有基于condition(A
解决方法
考虑到我的不同评论,这是基于有效数据集的解决方案:
from pyspark.sql import functions as F,Window
df.show() # Without columns parition and order,it is impossible to compute COL
+---------+-----+---+---+
|partition|order| 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") < F.col("B"),1).otherwise(0)).withColumn(
"COL",F.sum("flag").over(
Window.partitionBy("partition").orderBy(
"order"
) # Window is the reason why we need these two columns
),).show()
+---------+-----+---+---+----+---+
|partition|order| A| B|flag|COL|
+---------+-----+---+---+----+---+
| 1| 1| 5| 4| 0| 0|
| 1| 2| 5| 8| 1| 1|
| 1| 3| 6| 4| 0| 1|
| 1| 4| 4| 7| 1| 2|
| 2| 1| 7| 6| 0| 0|
| 2| 2| 8| 9| 1| 1|
| 2| 3| 3| 8| 1| 2|
+---------+-----+---+---+----+---+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。