假定下表是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()
如何在火花中实现这一目标?
答案 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中)