scala - 在 Spark Dataframe 中用空值替换空值

标签 scala apache-spark dataframe apache-spark-sql

我有一个包含 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/

相关文章:

scala - Spark Streaming 保证特定的启动窗口时间

scala - 哪个 PRNG 适合功能使用?

scala - 将元组添加到 map ?

hadoop - 安装 Spark Cluster,Hive 的问题

json - 如何使用 Spark 和 Spray Json 读取 json 文件并转换为案例类

python - 如何根据 Pandas 中具有特定值的列将多行合并为一行

scala - 如何使用udf更新包含数组的spark数据框列

scala - 从 Spark 中的 cassandra 表中删除

python - 选择用于复制 Pandas DataFrame 的列

python - 如何使用正则表达式转换 Pandas 中的转换列