如何在pyspark数据帧中按多个值查询一列



我通过pyspark中的spark.read.csv()获得了一个数据帧。我可以使用df.filter(df['mobile'] == 'Vivo')过滤数据。现在,我想通过多个值筛选"mobile"列。

例如,我有一个band_list=['Apple','Samsung','Vivo']

我想过滤这个band_list中的'mobile'值。

我知道有一种方法是df.filter((df['mobile'] == 'Apple') | (df['mobile'] == 'Samsung')|(df['mobile'] == 'Vivo')),但它不灵活。

有人能告诉我解决这个问题的另一种方法吗?

您可以使用isin:

df = spark.createDataFrame(['abc123','Apple','Samsung','ZXC321','Vivo'],"string")
band_list=['Apple','Samsung','Vivo']
df.filter(df.value.isin(band_list)).show()
+-------+
|  value|
+-------+
|  Apple|
|Samsung|
|   Vivo|
+-------+
>>> df1 = spark.createDataFrame([('spark',),('scala',),('elixir',)],['lang'])
>>> df1.show()
+------+
|  lang|
+------+
| spark|
| scala|
|elixir|
+------+
>>> df1.where('''lang in ('spark','scala')''').show()
+-----+
| lang|
+-----+
|spark|
|scala|
+-----+

最新更新