如果我有一个名为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无济于事。
1条答案
按热度按时间8yoxcaq71#
因为NULL表示没有值,不应该像这样检查。
使用
isNull
函数:或
coalesce
,返回第一个非空值: