我是pyspark的新手,我想在SYMBOL=[]和SYMBOL=[,]时查询数据帧。 这是符号结构
+------+
|SYMBOL|
+------+
| []|
| []|
| []|
| [,]|
| []|
| [,]|
我尝试使用类似df.filter(array_contains(df.INFO_CSQ.SYMBOL, None)).show()
它无法查询,并且存在警告
> cannot resolve 'array_contains(`INFO_CSQ`.`SYMBOL`, NULL)' due to data type mismatch: Null typed values cannot be used as arguments;;
我想这个问题可能是因为我没有用“无”作为论据,但我不知道要质疑这个问题
但是,当有值作为参数(例如df.filter(array_contains(df.INFO_CSQ.Allele, "A")).select("INFO_CSQ.Allele").show()
)时,这是有效的
我填写“A”作为参数,结果如下
+------+
|Allele|
+------+
| [A]|
| [A]|
| [A]|
| [A]|
| [A]|
如果您使用的是Spark>;=2.4,您可以使用
transform
检查数组中是否有空元素,并对转换结果的array_max
进行筛选如果至少有一个null元素,则转换后的结果将至少有一个
True
,并且array_max
的结果将是True
。否则,所有元素都将返回False
,因为它们都不是空的,array_max
将返回False
对于较早的Spark版本,可以使用UDF:
如果要专门检查
[]
和[,]
,可以使用:相关问题 更多 >
编程相关推荐