如何在Spark SQL中使用某些默认值替换空白列值

时间:2019-04-28 11:18:22

标签: apache-spark apache-spark-sql

我的数据中有一些字段具有空白值,我想将这些值替换为默认值“ NA”。

输入记录:

+-------+--------------------------+
|name   |email                     |
+-------+--------------------------+
|Bob    |Bob@gmail.com             |
|Tom    |                          |
+-------+--------------------------+

预期输出:

+-------+--------------------------+
|name   |email                     |
+-------+--------------------------+
|Bob    |aditya@gmail.com          |
|Tom    |NA                        |
+-------+--------------------------+

我所做的是尝试使用合并将NA替换为空白值,但是它没有按预期工作。

spark.sql(“”“选择名称,合并(电子邮件,“不可用”)作为来自临时服务器的电子邮件”“”))。show(false)

2 个答案:

答案 0 :(得分:0)

根据documentation,合并函数“返回不为null的第一列,如果所有输入均为null,则返回null”。

只有一列,它将始终总是返回该列的值。另外,空白值也不是空值。换句话说,Create Intermediate Flat Hive Table

解决问题的一种方法是使用null != ""函数,如下所示:

when

在SQL中,它可能看起来像这样:

df.withColumn("email", when('email === "", "NA").otherwise('email)

答案 1 :(得分:0)

仅当存在空值且空空格不被视为时,Coalesce才有效。

要解决您的问题,

1.Using length & trim functions:

df.withColumn("email", when((length(trim('email)) === 0 ), lit("NA"))
      .otherwise('email))
  .show(false)

2.Using regexp_replace:

df.select('name,regexp_replace('email, "^\\s+$", "NA"))
.show(false)