我有一个pyspark数据框,如下所示
DF
onRestored
我在所有列上的数据框架上进行过滤,并选择编号大于10的行[列数不能超过两列]
num11 num21
10 10
20 30
5 25
期望的输出是:
from pyspark.sql.functions import col
col_list = df.schema.names
df_fltered = df.where(col(c) >= 10 for c in col_list)
如何使用列列表上的迭代实现对多列的过滤,如上所述。 [所有的努力都是适当的]
[错误我的意思是:条件应该是字符串或列]
答案 0 :(得分:1)
您可以使用functools.reduce
来组合列条件,以模拟所有条件,例如,您可以使用reduce(lambda x, y: x & y, ...)
:
import pyspark.sql.functions as F
from functools import reduce
df.where(reduce(lambda x, y: x & y, (F.col(x) >= 10 for x in df.columns))).show()
+-----+-----+
|num11|num21|
+-----+-----+
| 10| 10|
| 20| 30|
+-----+-----+
答案 1 :(得分:1)
作为替代方案,如果您不反对某些类似sql的代码片段,则以下内容应该有效:
df.where("AND".join(["(%s >=10)"%(col) for col in col_list]))