为什么"选择unix_timestamp('')为空"当"选择unix_timestamp('')"时返回false。返回null?

时间:2016-11-08 20:49:47

标签: hadoop apache-spark hive apache-spark-sql

使用Spark 1.6.2并尝试查找字段是否包含空字符串或日期值。

Spark documentation解释说如果unix_timestamp()函数失败则返回null,因此预期会出现以下行为:

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

但是当我尝试用&#34检查它时,它是空的"它返回false:

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

相同的查询在Hive中返回true:

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

为了完整起见,这里是空的null检查:

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

1 个答案:

答案 0 :(得分:5)

这是一个错误,看起来它已经在Spark 2.x分支中解析(可能带有SPARK-12054)问题的根源是unix_timestamp返回的模式。如果你执行:

sqlContext.sql("select unix_timestamp('')").printSchema
你会看到:

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

由于报告的架构不会检查nullable值,因此unix_timestamp(...).isNull始终为false。

相关问题