PySpark查询空列表列报错:Unsupported literal类型异常及解决方法
PySpark查询空列表列的解决办法
直接写.where('column = []')会报错,是因为Spark SQL解析器没法把[]识别成合法的数组字面量,反而会把它解析成Java的ArrayList对象,而Spark不支持这种类型的字面量比较。下面是几种可行的解决方法:
用
size()函数判断数组长度为0
空列表的元素个数是0,直接通过size函数判断就行,两种写法都可以:# 函数式写法 df.where(size("column") == 0) # SQL表达式写法 df.where("size(column) = 0")Spark 3.0+ 用
array_is_empty()函数(更直观)
3.0及以上版本的Spark提供了专门判断空数组的函数,语义更清晰:# 函数式写法 from pyspark.sql.functions import array_is_empty df.where(array_is_empty("column")) # SQL表达式写法 df.where("array_is_empty(column)")用
array()生成空数组进行比较
如果你需要直接和空数组字面量比较,别写[],用Spark内置的array()函数生成空数组:from pyspark.sql.functions import array, col # 函数式写法 df.where(col("column") == array()) # SQL表达式写法 df.where("column = array()")
内容的提问来源于stack exchange,提问作者Nurlybek Amangeldiuly
相关产品推荐
相关产品推荐

