我有一个包含n列的数据框,我想用空值替换所有这些列中的空字符串。
我试过用
val ReadDf = rawDF.na.replace("columnA", Map( "" -> null));
和
val ReadDf = rawDF.withColumn("columnA", if($"columnA"=="") lit(null) else $"columnA" );
他们俩都没用。
任何线索都将受到高度赞赏。谢谢。
由于一个阻止replace
能够用空值替换值的错误,你的第一个方法接缝失败,请参阅here。
您的第二种方法失败是因为您在执行程序端Dataframe指令中混淆了驱动程序端Scala代码:您的if-else表达式将在驱动程序上评估一次(而不是每个记录);您想要通过调用when
函数替换它;此外,要比较列的值,您需要使用===
运算符,而不是Scala的==
,它只是比较驱动程序端的Column
对象:
import org.apache.spark.sql.functions._
rawDF.withColumn("columnA", when($"columnA" === "", lit(null)).otherwise($"columnA"))