scala 在DataFrame.with Column中,作为第二个参数的条件,如何检查该列的值是否为空?

ewm0tg9j  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(182)

如果我有一个名为df的DataFrame,它看起来如下:

+----+----+
|  a1+  a2|
+----+----+
| foo| bar|
| N/A| baz|
|null| etc|
+----+----+

我可以有选择地替换如下值:

val df2 = df.withColumn("a1", when($"a1" === "N/A", $"a2"))

因此df2看起来如下所示:

+----+----+
|  a1+  a2|
+----+----+
| foo| bar|
| baz| baz|
|null| etc|
+----+----+

但是为什么我不能检查它是否为空,比如:

val df3 = df2.withColumn("a1", when($"a1" === null, $"a2"))

这样我就能得到:

+----+----+
|  a1+  a2|
+----+----+
| foo| bar|
| baz| baz|
| etc| etc|
+----+----+

编辑:$“A1”.isNull似乎不起作用。会不会是因为我用来测试的 Dataframe 的构造方式,如下所示?

val schema = StructType(
                StructField("a1", StringType, false) ::
                StructField("a2", StringType, false) :: Nil
)

val data = sc.parallelize(Array(
                Row("foo","bar"),
                Row("N/A","baz"),
                Row(null,"etc"))
)

val df = sqlContext.createDataFrame(data, schema)

据我所知,我也不能使用Coalesce,因为有时我需要使用静态值而不是另一列的值。
再次编辑:将我的测试列设置为nullable=False无济于事。

8yoxcaq7

8yoxcaq71#

因为NULL表示没有值,不应该像这样检查。
使用isNull函数:

val df3 = df2.withColumn("a1", when($"a1".isNull, $"a2"))

coalesce,返回第一个非空值:

val df3 = df2.withColumn("a1", coalesce($"a1", $"a2"))

相关问题