我的数据中有一些字段具有空白值,我想将这些值替换为默认值“ NA”。
输入记录:
+-------+--------------------------+
|name |email |
+-------+--------------------------+
|Bob |Bob@gmail.com |
|Tom | |
+-------+--------------------------+
预期输出:
+-------+--------------------------+
|name |email |
+-------+--------------------------+
|Bob |aditya@gmail.com |
|Tom |NA |
+-------+--------------------------+
我所做的是尝试使用合并将NA替换为空白值,但是它没有按预期工作。
spark.sql(“”“选择名称,合并(电子邮件,“不可用”)作为来自临时服务器的电子邮件”“”))。show(false)
答案 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)