2016-08-30 3 views
0

Я использую Spark/Scala, и я хочу заполнить нули в моем DataFrame значениями по умолчанию, основанными на типе столбцов.na.fill in Spark DataFrame Scala

т.е. строковые столбцы -> "строка", числовые столбцы -> 111, булевы Columns -> Ложные и т.д.

В настоящее время DF.na.functions API предоставляет na.fill
fill(valueMap: Map[String, Any]) как

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

Для этого требуется знать имена столбцов, а также тип столбцов.

ИЛИ

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

Это только строка/Double типа, даже не Boolean.

Есть ли разумный способ сделать это?

+0

Вы, возможно, потребуется использовать 'isInstanceOf' проверить тип входящего данных и заменить правильное значение. – Shankar

+0

Просьба привести воспроизводимый пример. – mtoto

+0

Спасибо за помощь, я использовал Pattern Matching, чтобы найти тип, nad создал карту и использовал ее –

ответ

2

Посмотрите на dtypes: Array[(String, String)]. Вы можете использовать вывод этого метода для генерации Map для fill, например .:

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

Спасибо за помощь, я использовал Pattern Matching, чтобы найти тип, nad создал карту и использовал ее –

+0

Не могли бы вы привести пример о том, как вы это сделали? – ashK

+0

этот ответ должен быть принят ИМО –

Смежные вопросы