web-dev-qa-db-fra.com

PySpark remplace null dans la colonne par la valeur dans une autre colonne

Je veux remplacer les valeurs nulles dans une colonne par les valeurs d'une colonne adjacente, par exemple si j'ai

A|B
0,1
2,null
3,null
4,2

Je veux que ce soit:

A|B
0,1
2,2
3,3
4,2

Essayé avec

df.na.fill(df.A,"B")

Mais ça n'a pas marché, ça veut dire que la valeur devrait être un float, int, long, string ou dict

Des idées?

4
Luis Leal

À la fin trouvé une alternative:

df.withColumn("B",coalesce(df.B,df.A)) 
15
Luis Leal

Une autre réponse.

Si le df1 ci-dessous votre dataframe

rd1 = sc.parallelize([(0,1), (2,None), (3,None), (4,2)])
df1 = rd1.toDF(['A', 'B'])

from pyspark.sql.functions import when
df1.select('A',
           when( df1.B.isNull(), df1.A).otherwise(df1.B).alias('B')
          )\
   .show()
4
Rags
df.rdd.map(lambda row: row if row[1] else Row(a=row[0],b=row[0])).toDF().show()
1
Pushkr