我使用的是pyspark,我有一个只有一列值的大Dataframe,其中每一行都是一个长字符串:
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'
'2020-11-20;id55;149.77,-27.89'
...
...
...
我正在尝试提取Dataframe的行,其中“idxx”与字符串列表匹配,例如[“id01”、“id02”、“id22”、“id77”、…]。目前,我从Dataframe中提取行的方法是:
df.filter(df.col1.contains("id01") | df.col1.contains("id02") | df.col1.contains("id22") | ... )
有没有一种方法可以使它更有效,而不必将每个字符串项硬编码到filter函数中?
2条答案
按热度按时间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|
+-----------------------------+
l2osamch2#