2017-02-09 2 views
0

Angenommen, Sie haben ein Spark-Datenframe mit einigen Nullwerten, und Sie möchten die Werte einer Spalte durch die Werte von einem anderen ersetzen, wenn vorhanden. In Python/Pandas können Sie die fillna() Funktion verwenden, um dies ganz gut zu tun:Spark: Ersetzen Sie fehlende Werte durch Werte aus einer anderen Spalte

df = spark.createDataFrame([('a', 'b', 'c'),(None,'e', 'f'),(None,None,'i')], ['c1','c2','c3']) 
DF = df.toPandas() 
DF['c1'].fillna(DF['c2']).fillna(DF['c3']) 

Wie dies geschehen Pyspark verwenden kann?

Antwort

2

Sie benötigen die coalesce Funktion verwenden:

cDf = spark.createDataFrame([(None, None), (1, None), (None, 2)], ("a", "b")) 
cDF.show() 
# +----+----+ 
# | a| b| 
# +----+----+ 
# |null|null| 
# | 1|null| 
# |null| 2| 
# +----+----+ 

cDf.select(coalesce(cDf["a"], cDf["b"])).show() 
# +--------------+ 
# |coalesce(a, b)| 
# +--------------+ 
# |   null| 
# |    1| 
# |    2| 
# +--------------+ 

cDf.select('*', coalesce(cDf["a"], lit(0.0))).show() 
# +----+----+----------------+ 
# | a| b|coalesce(a, 0.0)| 
# +----+----+----------------+ 
# |null|null|    0.0| 
# | 1|null|    1.0| 
# |null| 2|    0.0| 
# +----+----+----------------+ 

Sie auch coalesce auf mehrere Spalten anwenden können:

cDf.select(coalesce(cDf["a"], cDf["b"], lit(0))).show() 
# ... 

Dieses Beispiel aus dem pyspark.sql API documentation genommen wird.

+1

Ausgezeichnet. Beachten Sie, dass mehrere Spalten zum Füllen von Werten übergeben werden können 'cDf.select (coalesce (cDf [" a "], cDf [" b "], lit (0))). Show()' – evilpilotfish

Verwandte Themen