Apache spark 如何在Spark sql中用一些默认值替换空白列值

Apache spark 如何在Spark sql中用一些默认值替换空白列值,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我的数据中有些字段的值为空,我想用默认值“NA”替换这些值 输入记录: +-------+--------------------------+ |name |email | +-------+--------------------------+ |Bob |Bob@gmail.com | |Tom | | +-------+--------------------

我的数据中有些字段的值为空,我想用默认值“NA”替换这些值

输入记录:

+-------+--------------------------+
|name   |email                     |
+-------+--------------------------+
|Bob    |Bob@gmail.com             |
|Tom    |                          |
+-------+--------------------------+
预期产出:

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

我所做的是尝试用聚结来代替空白值,但是它没有按预期工作。

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

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

如果只有一列,它将始终返回该列的值。此外,空值不是空值。换句话说,
null!=“”

解决问题的一种方法是使用
when
功能,如下所示:

df.withColumn(“email”,当('email==“”,'NA')。否则('email)
在SQL中,它可能如下所示:

spark.sql(“当email=''时选择case,然后选择'NA',否则从temp结束email”)

合并仅在存在空值且空空白未被视为时才有效

解决您的问题:

1.使用长度和修剪功能:

df.withColumn("email", when((length(trim('email)) === 0 ), lit("NA"))
      .otherwise('email))
  .show(false)
df.select('name,regexp_replace('email, "^\\s+$", "NA"))
.show(false)
2.使用regexp\u替换:

df.withColumn("email", when((length(trim('email)) === 0 ), lit("NA"))
      .otherwise('email))
  .show(false)
df.select('name,regexp_replace('email, "^\\s+$", "NA"))
.show(false)