2016-11-08 20 views
2

Spark 1.6.2を使用して、フィールドに空の文字列または日付値が含まれているかどうかを調べようとしています。select unix_timestamp( '')がnullを返すと、select unix_timestamp( '')がnullになるのはなぜfalseを返しますか?

Spark documentationは、それが動作が期待されているので、下に失敗した場合であればUNIX_TIMESTAMP()関数はnullを返していることを説明します。

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

しかし、私はそれはfalseを返します「nullである」とそれをチェックしようとすると:

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

同じクエリは、ハイブにtrueを返します:

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

ここでは完全を期すためにはnullにチェックをnullである:

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

答えて

5

これはバグであり、それはすでに(SPARK-12054とおそらく)スパーク2.xのブランチで解決されているように見えます、問題の原因は、スキーマですunix_timestampによって返されます。あなたが実行した場合:

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

あなたはわかります

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

ないnullable値がチェックされ、そしてunix_timestamp(...).isNullは常にfalseですされていないとして、スキーマが報告されているので。

関連する問題