Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Pyspark中筛选具有空数组的列_Python_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python 在Pyspark中筛选具有空数组的列

Python 在Pyspark中筛选具有空数组的列,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我有一个数据帧,它包含很多重复的值。它的聚合、不同计数如下所示 > df.groupby('fruits').count().sort(F.desc('count')).show() | fruits | count | | ----------- | ----------- | | [Apples] | 123 | | [] | 344 | | [Apples, plum]| 444

我有一个数据帧,它包含很多重复的值。它的聚合、不同计数如下所示

> df.groupby('fruits').count().sort(F.desc('count')).show()


| fruits        | count       |
| -----------   | ----------- |
| [Apples]      | 123         |
| []            | 344         |
| [Apples, plum]| 444         |
我的目标是筛选值为
[Apples]
[]
的所有行

令人惊讶的是,以下内容适用于非空数组,但对于空数组则不适用

将pyspark.sql.types导入为T
is_apples=F.udf(lambda-arr:arr==['apples'],T.BooleanType())
filter(is_apples(df.fruits).count()#有效!正确显示123。
is_empty=F.udf(lambda-arr:arr==[],T.BooleanType())
filter(为空(df.fruits).count()#不工作!应显示344,但显示零。

知道我做错了什么吗?

可能是一个包含空字符串的数组:

is_empty = F.udf(lambda arr: arr == [''], T.BooleanType())
或者它可能是一个空数组:

is_empty = F.udf(lambda arr: arr == [None], T.BooleanType())
要一次检查所有数据,您可以使用:

is_empty = F.udf(lambda arr: arr in [[], [''], [None]], T.BooleanType())
但实际上,您不需要自定义项,例如,您可以:

df.filter("fruits = array() or fruits = array('') or fruits = array(null)")

您可以通过检查数组的长度来执行此操作

is_empty = F.udf(lambda arr: len(arr) == 0, T.BooleanType())
df.filter(is_empty(df.fruits).count()