Здесь я хочу заменить значение в определенном столбце на ноль, если оно пустое. String.
Причина в том, что я использую org.apache.spark.sql.functions.coalesce
для заполнения одного столбца Dataframe на основе других столбцов,но я заметил в некоторых строках значение empty String
вместо null
, поэтому функция coalesce
работает не так, как ожидалось.
val myCoalesceColumnorder: Seq[String] = Seq("xx", "yy", "zz"),
val resolvedDf = df.select(
df("a"),
df("b"),
lower(org.apache.spark.sql.functions.coalesce(myCoalesceColumnorder.map(x => adjust(x)): _*)).as("resolved_id")
)
В приведенном выше примере я ожидал, что сначала заполнюresolved_id
со столбцом xx
, если он не равен нулю и если он равен нулю со столбцом yy
и так далее.Но так как иногда столбец xx
заполняется ""
вместо нуля, я получаю ""
в 'resolved_id'.
Я пытался исправить это с помощью
resolvedDf.na.replace("resolved_id", Map("" -> null))
Но на основев документации na.replace
он работает только в том случае, если ключ и значение либо Bolean
, либо String
, либо Double
, поэтому я не могу использовать null
здесь.
Я не хочу использоватьUDF
из-за проблемы с производительностью, я просто хочу знать, есть ли другой способ решить эту проблему?
Еще один способ исправить это с помощью when
, ноне уверен насчет производительности
resolvedDf
.withColumn("resolved_id", when(col("resolved_id").equalTo(""), null).otherwise(col("resolved_id")))