在Spark Dataframe中将空值替换为空值

问题描述 投票:1回答:1

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

我试过用

val ReadDf = rawDF.na.replace("columnA", Map( "" -> null));

val ReadDf = rawDF.withColumn("columnA", if($"columnA"=="") lit(null) else $"columnA" );

他们俩都没用。

任何线索都将受到高度赞赏。谢谢。

scala apache-spark dataframe apache-spark-sql
1个回答
3
投票

由于一个阻止replace能够用空值替换值的错误,你的第一个方法接缝失败,请参阅here

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

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

rawDF.withColumn("columnA", when($"columnA" === "", lit(null)).otherwise($"columnA"))
© www.soinside.com 2019 - 2024. All rights reserved.