Pyspark:字符串列上的多个过滤器

时间:2019-07-11 08:01:12

标签: python pandas pyspark apache-spark-sql pyspark-sql

假定下表是pyspark数据框,我想对多个值的 ind 列应用过滤器。如何在pyspark中执行此操作?

ind group people value 
John  1    5    100   
Ram   1    2    2       
John  1    10   80    
Tom   2    20   40    
Tom   1    7    10    
Anil  2    23   30    

我正在尝试追踪,但没有成功

filter = ['John', 'Ram']
filtered_df = df.filter("ind == filter ")
filtered_df.show()

如何在火花中实现这一目标?

2 个答案:

答案 0 :(得分:2)

您可以使用内置函数 isin: filtered_df = df.filter(df["ind"].isin(["John", "Ram"])

答案 1 :(得分:1)

您可以使用:

filter = ['John', 'Ram']
filtered_df = df.filter("ind in ('John', 'Ram') ")
filtered_df.show()

filter = ['John', 'Ram']
processed_for_pyspark = ', '.join(['\'' + s + '\'' for s in filter])
filtered_df = df.filter("ind in ({}) ".format(processed_for_puspark))
filtered_df.show()

如果要将过滤器放在列表中。还要注意,我们使用单等号=而不是双等号==来测试pyspark中的相等性(例如在SQL中)