Mar*_*kNS 1 apache-spark apache-spark-sql pyspark
我正在尝试过滤PySpark数据帧的行,其中所有列的值都为零.
我希望使用这样的东西:
from pyspark.sql.functions import col
df.filter(all([(col(c) != 0) for c in df.columns]))
Run Code Online (Sandbox Code Playgroud)
但我得到一个ValueError:
ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.
Run Code Online (Sandbox Code Playgroud)
有没有办法执行逻辑和条件列表?
只是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)))
Run Code Online (Sandbox Code Playgroud)
要么
df.where(reduce(and_, (col(c) != 0 for c in df.columns), lit(True)))
Run Code Online (Sandbox Code Playgroud)
如果您希望谓词列表可能为空.
例如,如果数据如下所示:
df = sc.parallelize([
(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 1)
]).toDF(["x", "y", "z"])
Run Code Online (Sandbox Code Playgroud)
结果将是:
+---+---+---+
| x| y| z|
+---+---+---+
| 1| 1| 1|
+---+---+---+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1397 次 |
最近记录: |