2017-02-09 121 views
0

假設您有一個包含一些空值的Spark數據框,並且您希望將一列的值替換爲另一列的值(如果存在)。在python /大熊貓可以使用fillna()函數來做到這一點相當不錯:Spark:用另一列中的值替換缺失值

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']) 

怎麼可以這樣使用Pyspark做?

回答

2

您需要使用COALESCE功能:

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| 
# +----+----+----------------+ 

您也可以在多個列應用​​3210:

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

這個例子是從pyspark.sql API documentation拍攝。

+1

優秀。值得注意的是可以傳遞多個列來填充值 'cDf.select(coalesce(cDf [「a」],cDf [「b」],lit(0)))。show()' – evilpilotfish

相關問題