2016-08-30 1920 views
0

我使用的是Spark/Scala,我想根據列的類型使用默認值填充DataFrame中的空值。在Spark DataFrame中的na.fill Scala

即字符串列 - > 「串」,數值列 - > 111,布爾列 - >假等

目前DF.na.functions API na.fill
fill(valueMap: Map[String, Any])提供像

df.na.fill(Map(
    "A" -> "unknown", 
    "B" -> 1.0 
)) 

這需要知道列名稱以及列的類型。

OR

fill(value: String, cols: Seq[String]) 

這只是字符串/ double類型,甚至沒有布爾。

有沒有一個聰明的方法來做到這一點?

+0

您可能需要使用'isInstanceOf'檢查輸入的數據類型和更換合適。 – Shankar

+0

請提供一個可重現的例子。 – mtoto

+0

感謝您的幫助,我使用模式匹配來查找類型,nad創建了一個映射並使用它 –

回答

2

看看dtypes: Array[(String, String)]。您可以使用此方法的輸出,以產生Mapfill,例如:

val typeMap = df.dtypes.map(column => 
    column._2 match { 
     case "IntegerType" => (column._1 -> 0) 
     case "StringType" => (column._1 -> "") 
     case "DoubleType" => (column._1 -> 0.0) 
    }).toMap 
+0

感謝您的幫助,我使用模式匹配來查找類型, nad創建了一張地圖,並用它 –

+0

你能舉個例子說明你是如何做到這一點的? – ashK

+0

這個答案應該被接受IMO –

相關問題