如何在PySpark DataFrame中通过多个值查询列?

时间:2019-10-28 09:15:01

标签: python dataframe apache-spark pyspark

我在pyspark中通过spark.read.csv()获得了一个数据框。我可以使用df.filter(df['mobile'] == 'Vivo')过滤数据。现在,我想按多个值过滤“移动”列。

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

我想过滤此band_list中的'mobile'值。

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

有人可以告诉我另一种解决此问题的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用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|
+-------+

答案 1 :(得分:0)

>>> df1 = spark.createDataFrame([('spark',),('scala',),('elixir',)],['lang'])
>>> df1.show()
+------+
|  lang|
+------+
| spark|
| scala|
|elixir|
+------+

>>> df1.where('''lang in ('spark','scala')''').show()
+-----+
| lang|
+-----+
|spark|
|scala|
+-----+