为什么“select unix\u timestamp('')为null”返回false而“select unix\u timestamp('')”返回null?

jckbn6z7  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(435)

使用spark 1.6.2并尝试查找字段是否包含空字符串或日期值。
spark文档解释说,如果unix\u timestamp()函数失败时返回null,则预期会出现以下行为:

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

但当我尝试用“is null”检查它时,它返回false:

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|
+----+
k7fdbhmy

k7fdbhmy1#

这是一个bug,看起来它已经在spark2.x分支(可能是spark-12054)中得到了解决问题的根源是 unix_timestamp . 如果执行:

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

您将看到:

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

因为schema被报告为not nullable 不检查值,并且 unix_timestamp(...).isNull 总是假的。

相关问题