我有一个包含 n 列的数据框,我想用空值替换所有这些列中的空字符串。
我试过用
val ReadDf = rawDF.na.replace("columnA", Map( "" -> null));
和
val ReadDf = rawDF.withColumn("columnA", if($"columnA"=="") lit(null) else $"columnA" );
他们都没有工作。
任何线索将不胜感激。谢谢。
最佳答案
您的第一种方法由于一个阻止 replace
能够用空值替换值的错误而失败,请参阅 here .
您的第二种方法失败了,因为您将驱动程序端 Scala 代码与执行程序端 Dataframe 指令混淆了:您的 if-else 表达式将在驱动程序上被评估一次 (而不是每条记录);您希望将其替换为对 when
函数的调用;此外,要比较列的值,您需要使用 ===
运算符,而不是 Scala 的 ==
,它只比较驱动程序端的 Column
对象:
import org.apache.spark.sql.functions._
rawDF.withColumn("columnA", when($"columnA" === "", lit(null)).otherwise($"columnA"))
关于scala - 在 Spark Dataframe 中用空值替换空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44102133/