用 Spark Dataframe 中的空值替换空值

Vin*_*mar 3 scala dataframe apache-spark apache-spark-sql

我有一个包含 n 列的数据框,我想用空值替换所有这些列中的空字符串。

我尝试使用

val ReadDf = rawDF.na.replace("columnA", Map( "" -> null));
Run Code Online (Sandbox Code Playgroud)

val ReadDf = rawDF.withColumn("columnA", if($"columnA"=="") lit(null) else $"columnA" );
Run Code Online (Sandbox Code Playgroud)

他们两个都没有工作。

任何线索将不胜感激。谢谢。

Tza*_*har 6

您的第一种方法由于一个错误而失败,该错误阻止replace能够用空值替换值,请参见此处

您的第二种方法失败了,因为您将驱动程序端 Scala 代码与执行程序端 Dataframe 指令混淆:您的 if-else 表达式将在驱动程序上评估一次(而不是每条记录);你想用函数调用替换它;此外,要比较列的值,您需要使用运算符,而不是仅比较驱动程序端对象的Scala :when=====Column

import org.apache.spark.sql.functions._

rawDF.withColumn("columnA", when($"columnA" === "", lit(null)).otherwise($"columnA"))
Run Code Online (Sandbox Code Playgroud)