Przede wszystkim nie używaj kodu null
w swoim kodzie Scala, chyba że naprawdę musisz z powodu kompatybilności.
Jeśli chodzi o twoje pytanie, jest to zwykły kod SQL. col("c1") === null
jest interpretowany jako c1 = NULL
, a ponieważ NULL
oznacza niezdefiniowane wartości, wynik jest niezdefiniowany dla dowolnej wartości, w tym samej NULL
.
spark.sql("SELECT NULL = NULL").show
+-------------+
|(NULL = NULL)|
+-------------+
| null|
+-------------+
spark.sql("SELECT NULL != NULL").show
+-------------------+
|(NOT (NULL = NULL))|
+-------------------+
| null|
+-------------------+
spark.sql("SELECT TRUE != NULL").show
+------------------------------------+
|(NOT (true = CAST(NULL AS BOOLEAN)))|
+------------------------------------+
| null|
+------------------------------------+
spark.sql("SELECT TRUE = NULL").show
+------------------------------+
|(true = CAST(NULL AS BOOLEAN))|
+------------------------------+
| null|
+------------------------------+
wyłącznie ważny metod, aby sprawdzić NULL
są:
IS NULL
:
spark.sql("SELECT NULL IS NULL").show
+--------------+
|(NULL IS NULL)|
+--------------+
| true|
+--------------+
spark.sql("SELECT TRUE IS NULL").show
+--------------+
|(true IS NULL)|
+--------------+
| false|
+--------------+
IS NOT NULL
:
spark.sql("SELECT NULL IS NOT NULL").show
+------------------+
|(NULL IS NOT NULL)|
+------------------+
| false|
+------------------+
spark.sql("SELECT TRUE IS NOT NULL").show
+------------------+
|(true IS NOT NULL)|
+------------------+
| true|
+------------------+
realizowane w DataFrame
DSL jako Column.isNull
i Column.isNotNull
odpowiednio.
Przepraszam, nie mogłem zrozumieć jednej rzeczy. Dlaczego otrzymuję rekordy, gdy używam ===. Jak to będzie możliwe @mattinbits – John
Czy twoje dane rzeczywiście mają "null" w tej kolumnie? – mattinbits
Ma kilka pustych rekordów (""), ale liczba zwracanych rekordów nie pasuje do pustego łańcucha, gdy używam === null. Będzie miał puste i niepuste rekordy. Ale otrzymuję wyjątek wskaźnika NULL podczas wywoływania pakietu udf, który nie ma zerowej kontroli. – John