我正试图在Scala中使用regexp_replace
用null
值替换空白。然而,我尝试过的所有变体都没有达到预期的输出:
+---+-----+
| Id|col_1|
+---+-----+
| 0| null|
| 1| null|
+---+-----+
我试了一下,看起来像这样:
import org.apache.spark.sql.functions._
val df = spark.createDataFrame(Seq(
(0, " "),
(1, null),
(2, "hello"))).toDF("Id", "col_1")
val test = df.withColumn("col_1", regexp_replace(df("col_1"), "^\s*", lit(Null)))
test.filter("col_1 is null").show()
使用regexp_replace
的方式不起作用,因为结果只是将匹配的子字符串替换为另一个提供的子字符串。您可以在when/other
子句中使用regexp_extract进行regex相等性检查,如下所示:
import org.apache.spark.sql.functions._
val df = Seq(
(0, " "),
(1, null),
(2, "hello"),
(3, "")
).toDF("Id", "col_1")
df.withColumn("col_1",
when($"col_1" === regexp_extract($"col_1", "(^\s*$)", 1), null).
otherwise($"col_1")
).show
// +---+-----+
// | Id|col_1|
// +---+-----+
// | 0| null|
// | 1| null|
// | 2|hello|
// | 3| null|
// +---+-----+