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

Posted

技术标签:

【中文标题】Pyspark:字符串列上的多个过滤器【英文标题】:Pyspark: multiple filter on string column 【发布时间】:2019-07-11 08:01:12 【问题描述】:

假设下表是 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()

如何在 spark 中实现这一点?

【问题讨论】:

这与你想要的相反:***.com/questions/39624277/… - 所以你知道你需要使用in 函数/运算符。 这里:spark.apache.org/docs/2.1.0/api/python/… Pyspark isin function的可能重复 【参考方案1】:

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

【讨论】:

【参考方案2】:

你可以使用:

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 中一样)

【讨论】:

以上是关于Pyspark:字符串列上的多个过滤器的主要内容,如果未能解决你的问题,请参考以下文章

使用负索引从pyspark字符串列的最后一个索引中对多个字符进行子字符串

过滤具有特定字符的字符串列[关闭]

Pandas 过滤多个串联子串

修改字符串列并替换子字符串 pyspark

如何在pyspark中将字符串列转换为ArrayType

Pyspark:过滤多列上的行