数据
from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder.getOrCreate()
data = [(1, 8, 1, None),
(1, 1, 8, None),
(2, 1, 8, None),
(2, 8, 8, 9999)]
df = spark.createDataFrame(data, ['c1', 'c2', 'c3', 'c4'])
条件列表:
conditions = [
((F.col('c1') == 2) | (F.col('c2') < 5)),
((F.col('c3') == 1) | F.col('c4').isNotNull())
]
要重写的筛选器:
df = df.filter(conditions[0] & conditions[1])
df.show()
# +---+---+---+----+
# | c1| c2| c3| c4|
# +---+---+---+----+
# | 2| 8| 8|9999|
# +---+---+---+----+
在我的原始数据中,列表中有许多未定义的条件。我正在寻找一种使用AND将它们组合在一起的方法,这样我就不需要使用索引号单独引用它们了。
我尝试过Python的内置
all()
:
df = df.filter(all(conditions))
ValueError:无法将列转换为布尔:请使用“&”用于“and”,“|”表示“or”,“~”表示“not”。