gpt4 book ai didi

python - 在条件列表上使用逻辑AND的PySpark DataFrame过滤器-Numpy All Equivalent

转载 作者:行者123 更新时间:2023-12-03 16:06:52 24 4
gpt4 key购买 nike

如果所有列的值为零,我试图过滤PySpark数据帧的行。
我希望使用这样的东西(使用numpy函数np.all()):

from pyspark.sql.functions import col
df.filter(all([(col(c) != 0) for c in df.columns]))
但是我得到了ValueError:
ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.
有什么方法可以执行逻辑运算并满足条件列表吗? PySpark中对应的 np.all功能是什么?

最佳答案

只是reduce谓词列表

from pyspark.sql.functions import lit
from operator import and_
from functools import reduce

df.where(reduce(and_, (col(c) != 0 for c in df.columns)))

或者
df.where(reduce(and_, (col(c) != 0 for c in df.columns), lit(True)))

如果您希望谓词列表可能为空。

例如,如果数据如下所示:

df  = sc.parallelize([
(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 1)
]).toDF(["x", "y", "z"])

结果将是:

+---+---+---+
| x| y| z|
+---+---+---+
| 1| 1| 1|
+---+---+---+

关于python - 在条件列表上使用逻辑AND的PySpark DataFrame过滤器-Numpy All Equivalent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41239629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com