Pyspark:提取数据帧的行,其中值包含一串字符

cod*_*r93 1 sql apache-spark apache-spark-sql pyspark

我正在使用 pyspark 并且我有一个只有一列值的大数据框,其中每一行都是一长串字符:

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'
...
...
...
Run Code Online (Sandbox Code Playgroud)

我正在尝试提取数据帧的行,其中 'idxx' 匹配字符串列表,例如 ["id01", "id02", "id22", "id77", ...]。目前,我从数据框中提取行的方式是:

df.filter(df.col1.contains("id01") | df.col1.contains("id02") | df.col1.contains("id22") | ... )
Run Code Online (Sandbox Code Playgroud)

有没有办法使这更有效,而不必将每个字符串项硬编码到过滤器函数中?

Shu*_*Shu 5

.rlike在 pyspark 中尝试使用运算符。

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|
#+-----------------------------+
Run Code Online (Sandbox Code Playgroud)