Spark SQL的where子句排除空值

Spark SQL的where子句排除空值,第1张

Spark SQL的where子句排除空值

发生这种情况是因为

NULL
在SQL中等效于“未知”。这意味着与/
NULL
以外的任何比较均未定义并返回。
IS NULL``IS NOTNULL``NULL

case class Record(id: Integer, value: String)val df = sc.parallelize(Seq(Record(1, "foo"), Record(2, null))).toDFdf.registerTempTable("df")sqlContext.sql("""SELECt value = "foo" FROM df""").show// +----+// | _c0|// +----+// |true|// |null|// +----+sqlContext.sql("""SELECt value != "foo" FROM df""").show// +-----+// |  _c0|// +-----+// |false|// | null|// +-----+

因此,

IN
/
NOT IN
也未定义:

sqlContext.sql("""SELECt value IN ("foo", "bar")  FROM df""").show// +----+// | _c0|// +----+// |true|// |null|// +----+

这是标准的SQL行为,正确实施SQL标准的系统应以相同的方式运行。如果要过滤并保留

NULLs
,则必须明确地进行过滤:

sqlContext.sql(  """SELECt value IN ("foo", "bar") OR value IS NULL FROM df""").show// +----+// | _c0|// +----+// |true|// |true|// +----+


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5649678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存