擅长:python、mysql、java
<p>您可以使用<code>nanvl</code>将<code>NaN</code>替换为结果的<code>lead</code>值(相当于<code>ffill</code>;<code>bfill</code>将是<code>lag</code>):</p>
<pre><code>from pyspark.sql import functions as F, Window
df2 = df.withColumn(
'id', F.monotonically_increasing_id()
).withColumn(
'result',
F.nanvl(
'result',
F.coalesce(
F.lag('result').over(Window.partitionBy('Col1', 'Col2').orderBy('id')),
F.lead('result').over(Window.partitionBy('Col1', 'Col2').orderBy('id'))
)
)
).orderBy('id')
df2.show()
+ -+ + + +
| id|Col1|Col2|result|
+ -+ + + +
| 0| a| x| 123.0|
| 1| a| y| 675.0|
| 2| a| x| 453.0|
| 3| a| y| 675.0|
| 4| b| x| 786.0|
| 5| b| y| 332.0|
+ -+ + + +
</code></pre>