在spark scala的数据帧列中过滤NULL值

Bab*_*Bab 1 scala apache-spark

我有一个数据框(df),其中包含以下内容:

+---------+--------------------+
|  col1|        col2           |
+---------+--------------------+
|colvalue1|                NULL|   
|colvalue2|col2value...        |
+------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

我正在尝试根据 col2 过滤行,如下所示

df.filter(($"col2".isNotNULL) || ($"col2" !== "NULL")  || ($"col2" !== "null")  || ($"col2".trim !== "NULL"))
Run Code Online (Sandbox Code Playgroud)

但是具有 NULL 的行没有过滤。本栏目显示nullable=true

谁能让我知道我在做什么错误?我正在使用 Spark 1.6。

Ram*_*jan 6

您的!==符号应该是错误的=!=,您不能这样做,$"col2".trim并且由于您使用了与||的否定,因此否定之一始终为 true。在你的例子($"col2".isNotNULL)中总是如此,所以每一行都被过滤了。所以单独的否定结合 by||应该小心。

所以正确的形式是

df.filter(!($"col2".isNull || ($"col2" === "NULL") || ($"col2" === "null")))
Run Code Online (Sandbox Code Playgroud)

甚至更好,如果您使用内置功能isnulltrim

df.filter(!(isnull($"col2") || (trim($"col2") === "NULL") || (trim($"col2") === "null")))
Run Code Online (Sandbox Code Playgroud)