2016-11-08 6 views
2

Mit Spark 1.6.2 und versuchen zu finden, ob ein Feld eine leere Zeichenfolge oder einen Datumswert enthält.Warum "select unix_timestamp ('') ist null" gibt false zurück, wenn "select unix_timestamp ('')" null zurückgibt?

Spark documentation erklärt, dass, wenn unix_timestamp() Funktion null zurück, wenn es so unten ausfällt ist das erwartete Verhalten:

sqlContext.sql("select unix_timestamp('')").show 
+----+ 
| _c0| 
+----+ 
|null| 
+----+ 

Aber wenn ich versuche, es zu überprüfen mit "null" es gibt false zurück:

sqlContext.sql("select unix_timestamp('') is null").show 
+-----+ 
| _c0| 
+-----+ 
|false| 
+-----+ 

Gleiche Abfrage liefert true in Hive:

hive> select unix_timestamp('') is null; 
OK 
true 

Hier ist null Überprüfung auf null aus Gründen der Vollständigkeit halber:

sqlContext.sql("select null is null").show 
+----+ 
| _c0| 
+----+ 
|true| 
+----+ 

Antwort

5

dies ein Fehler ist und es sieht aus wie es bereits in Spark-2.x Verzweigung aufgelöst worden ist (wahrscheinlich mit SPARK-12054) Die Quelle des Problems Schema zurückgegeben von der unix_timestamp. Wenn Sie ausführen:

sqlContext.sql("select unix_timestamp('')").printSchema 

Sie werden sehen:

root 
|-- _c0: long (nullable = false) 

Da Schema als nicht nullable angegebenen Werte werden nicht überprüft und und unix_timestamp(...).isNull ist immer falsch.

Verwandte Themen