Dataframe 在另一个窗口中创建窗口?

Dataframe 在另一个窗口中创建窗口?,dataframe,apache-spark,Dataframe,Apache Spark,我有一个这样的数据帧 +----+-----+ |name|value| +----+-----+ | A| 7| | A| 5| | A| 1| | A| 1| | A| 1| | A| 6| | A| 1| | A| 1| | A| 1| | B| 2| | B| 1| +----+-----+ 我想将其转换为具有以下值的数据帧: +----+-----+ |name|value|

我有一个这样的数据帧

+----+-----+
|name|value|
+----+-----+
|   A|    7|
|   A|    5|
|   A|    1|
|   A|    1|
|   A|    1|
|   A|    6|
|   A|    1|
|   A|    1|
|   A|    1|
|   B|    2|
|   B|    1|
+----+-----+
我想将其转换为具有以下值的数据帧:

+----+-----+
|name|value|
+----+-----+
|   A|    7|
|   A|    5|
|   A|    5|
|   A|    5|
|   A|    5|
|   A|    6|
|   A|    6|
|   A|    6|
|   A|    6|
|   B|    2|
|   B|    2|
+----+-----+
实际上,我想在
name
字段上通过分区创建一个窗口,然后在其中创建一个窗口(或类似的东西),从当前行的
值开始,并对后续行的数据进行分组,直到出现一个值以外的值


如何做到这一点?

基于@Manish在评论中的想法,我将
1
值更改为
null
,并添加了一个
order
列,该列唯一地指示行的顺序

+----+-----+-----+
|name|order|value|
+----+-----+-----+
|   A|    1|    7|
|   A|    2|    5|
|   A|    3| null|
|   A|    4| null|
|   A|    5| null|
|   A|    6|    6|
|   A|    7| null|
|   A|    8| null|
|   A|    9| null|
|   B|   10|    2|
|   B|   11| null|
+----+-----+-----+
然后使用带有
ignorenulls
参数的
last
方法解决了问题

win1 = Window.partitionBy("name").orderBy("order")
s = F.last(d.value, ignorenulls = True).over(win1)

d = d.withColumn(
    'value1',
    F.when(
        d.name == F.lag('name').over(win1),
        s
    ).otherwise(s)
)

d.show()

+----+-----+-----+
|name|order|value|
+----+-----+-----+
|   B|   10|    2|
|   B|   11|    2|
|   A|    1|    7|
|   A|    2|    5|
|   A|    3|    5|
|   A|    4|    5|
|   A|    5|    5|
|   A|    6|    6|
|   A|    7|    6|
|   A|    8|    6|
|   A|    9|    6|
+----+-----+-----+

“value”列的顺序应该如何。@Manish
1
值是可选的,可以是任何其他值,但它们必须与原始数据帧的顺序相同。我的意思是最后在
7
之后,必须有四个
7