填充pyspark中另一行的缺失值

brvekthn  于 2021-05-26  发布在  Spark
关注(0)|答案(1)|浏览(753)

我有pysparkDataframe,我需要根据代码列填写我的id

如何用其他行的匹配值替换nan?我们能用凝聚吗?

cgvd09ve

cgvd09ve1#

下面是如何做到这一点。注意,由于原始Dataframe没有定义顺序,所以顺序没有保留。

import pyspark.sql.functions as F
from pyspark.sql.window import Window

df2 = df.withColumn('ID', F.first('ID', True).over(Window.partitionBy('Code')))

df2.show()
+---+----+
| ID|Code|
+---+----+
|  7|  AZ|
|  7|  AZ|
|  3|  EV|
|  3|  EV|
|  8|  FW|
|  5|  CX|
|  5|  CX|
|  5|  CX|
|  9|  BY|
|  2|  GU|
|  1|  DW|
+---+----+

如果要保持原始顺序,可以执行分配索引的另一个步骤:

df2 = df.withColumn('index', F.monotonically_increasing_id()).withColumn('ID', F.first('ID', True).over(Window.partitionBy('Code'))).orderBy('index').drop('index')

df2.show()
+---+----+
| ID|Code|
+---+----+
|  7|  AZ|
|  5|  CX|
|  9|  BY|
|  5|  CX|
|  5|  CX|
|  1|  DW|
|  7|  AZ|
|  3|  EV|
|  8|  FW|
|  3|  EV|
|  2|  GU|
+---+----+

相关问题