我有一个DataFrame,其中包含许多重复的值。它的聚合非重复计数如下所示
> df.groupby('fruits').count().sort(F.desc('count')).show()
| fruits | count |
| ----------- | ----------- |
| [Apples] | 123 |
| [] | 344 |
| [Apples, plum]| 444 |
我的目标是筛选值为[Apples]
或[]
的所有行。
令人惊讶的是,下面的代码对非空数组有效,但对空数组无效
import pyspark.sql.types as T
is_apples = F.udf(lambda arr: arr == ['Apples'], T.BooleanType())
df.filter(is_apples(df.fruits).count() # WORKS! shows 123 correctly.
is_empty = F.udf(lambda arr: arr == [], T.BooleanType())
df.filter(is_empty(df.fruits).count() # Doesn't work! Should show 344 but shows zero.
知道我做错了什么吗?
3条答案
按热度按时间2ledvvac1#
它可能是包含空字符串的数组:
或者它可能是一个null数组:
若要一次检查所有项目,您可以用途:
但实际上,您不需要为此使用UDF,例如,您可以执行以下操作:
xeufq47z2#
您可以通过检查数组的长度来完成此操作。
lmvvr0a83#
如果不想使用UDF,可以使用F.size来获取数组的大小。
要过滤空数组:
要筛选非空数组: