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:字符串列上的多个过滤器的主要内容,如果未能解决你的问题,请参考以下文章