Python 使用字典中的值筛选Spark数据帧
我需要使用dict过滤数据帧,dict构造为键为列名,值为我要过滤的值: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
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)