从spark sql中的Struct数据类型中找出null

时间:2018-04-19 16:42:02

标签: apache-spark

我有一个employee表,其中address是struct数据类型,struct里面的一些值是null。那么如何找到我们没有一个带有spark sql的null的行。我得到了一个小的答案表格中我们在结构中有两个字段,但是如何找出结构类型中是否有超过100个字段..我们要创建udf还是其他approch?

df.filter($"address.city".isNotNull and $"address.pin".isNotNull).show()

提前致谢

1 个答案:

答案 0 :(得分:1)

获取列名称:

val fields = df.select($"address.*").columns

并使用过滤器:

import org.apache.spark.sql.functions._

df.where(fields map(c => col(s"address.`$c`").isNotNull) reduce(_ and _))

要跳过空字符串,只需添加:

df.where(fields map(c => col(s"address.`$c`")) 
                map(c => not(trim(c) <=> "") and  c.isNotNull)
                reduce(_ and _))