pyspark:提取Dataframe中值包含字符串的行

yqlxgs2m  于 2021-05-16  发布在  Spark
关注(0)|答案(2)|浏览(680)

我使用的是pyspark,我有一个只有一列值的大Dataframe,其中每一行都是一个长字符串:

  1. col1
  2. -------
  3. '2020-11-20;id09;150.09,-20.02'
  4. '2020-11-20;id44;151.78,-25.14'
  5. '2020-11-20;id78;148.24,-22.67'
  6. '2020-11-20;id55;149.77,-27.89'
  7. ...
  8. ...
  9. ...

我正在尝试提取Dataframe的行,其中“idxx”与字符串列表匹配,例如[“id01”、“id02”、“id22”、“id77”、…]。目前,我从Dataframe中提取行的方法是:

  1. df.filter(df.col1.contains("id01") | df.col1.contains("id02") | df.col1.contains("id22") | ... )

有没有一种方法可以使它更有效,而不必将每个字符串项硬编码到filter函数中?

c6ubokkw

c6ubokkw1#

尝试 .rlike Pypark的操作员。 Example: ```
df.show(10,False)

+-----------------------------+

|col1 |

+-----------------------------+

|2020-11-20;id09;150.09,-20.02|

|2020-11-20;id44;151.78,-25.14|

|2020-11-20;id78;148.24,-22.67|

+-----------------------------+

(id09|id78) match either id09 or id78

for your case use this df.filter(col("col1").rlike('(id01|id02|id22)')).show(10,False)

df.filter(col("col1").rlike('(id09|id78)')).show(10,False)

+-----------------------------+

|col1 |

+-----------------------------+

|2020-11-20;id09;150.09,-20.02|

|2020-11-20;id78;148.24,-22.67|

+-----------------------------+

展开查看全部
l2osamch

l2osamch2#

  1. from functools import reduce
  2. from operator import or_
  3. str_list = ["id01", "id02", "id22", "id77"]
  4. df.filter(reduce(or_, [df.col1.contains(s) for s in str_list]))

相关问题