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