Python 使用字典中的值筛选Spark数据帧

Python 使用字典中的值筛选Spark数据帧,python,pandas,apache-spark,filter,pyspark,Python,Pandas,Apache Spark,Filter,Pyspark,我需要使用dict过滤数据帧,dict构造为键为列名,值为我要过滤的值: filter = {'column_1' = 'Y', 'column_2' = 'N'} 我理解如何使用熊猫的数据帧通过使用下面的函数来实现这一点 def filter(df, filters): for i in filters: filtered_df = df.loc[(df[list(filters)] == pd.Series(filters)).all(axis=1)] ret

我需要使用dict过滤数据帧,dict构造为键为列名,值为我要过滤的值:

filter = {'column_1' = 'Y', 'column_2' = 'N'}
我理解如何使用熊猫的数据帧通过使用下面的函数来实现这一点

def filter(df, filters):
    for i in filters:
         filtered_df = df.loc[(df[list(filters)] == pd.Series(filters)).all(axis=1)]
  return filtered_df
然而,
.loc
不是熊猫之外使用的方法,我还没有完全掌握Spark复制品将是什么。我知道他们有一个
.locate
方法,但语法似乎有很大不同


非常感谢这里有一个例子。您可以构造一个SQL表达式字符串来过滤Spark数据帧

filter = {'column_1': 'Y', 'column_2': 'N'}

df = spark.createDataFrame([['Y', 'N'], ['Y', 'Y']], ['column_1', 'column_2'])
df.show()
+--------+--------+
|column_1|column_2|
+--------+--------+
|       Y|       N|
|       Y|       Y|
+--------+--------+

filter_string = ' and '.join([f"{k} = '{v}'" for (k, v) in filter.items()])
print(filter_string)
# column_1 = 'Y' and column_2 = 'N'

filtered_df = df.filter(filter_string)
filtered_df.show()
+--------+--------+
|column_1|column_2|
+--------+--------+
|       Y|       N|
+--------+--------+
也可以将过滤条件构造为火花柱:

from functools import reduce

filter_col = reduce(lambda x, y: x & y, [F.col(k) == v for (k, v) in filter.items()])

filtered_df = df.filter(filter_col)