擅长:python、mysql、java
<p>要从列表中查找包含一个字符串的所有行,可以使用方法<a href="https://spark.apache.org/docs/2.2.0/api/python/pyspark.sql.html#pyspark.sql.Column.rlike" rel="nofollow noreferrer">^{<cd1>}</a>。例如:</p>
<pre><code>+ +
| value|
+ +
| text|
|text testA|
|text testB|
|text testC|
| text|
+ +
listStr=["testA","testB","testC"]
lines.filter(F.col('value').rlike('|'.join(listStr))).show()
</code></pre>
<p>输出:</p>
<pre><code>+ +
| value|
+ +
|text testA|
|text testB|
|text testC|
+ +
</code></pre>
<p>您的解决方案不起作用,因为方法<a href="https://spark.apache.org/docs/2.2.0/api/python/pyspark.sql.html#pyspark.sql.Column.isin" rel="nofollow noreferrer">^{<cd2>}</a>测试单元格值是否等于列表中的一个值。您只能对列对象(在PySpark 3中)使用此方法,否则将得到<code>AttributeError</code>。它将适用于以下数据帧:</p>
<pre><code>+ -+
|value|
+ -+
| text|
|testA|
|testB|
|testC|
| text|
+ -+
listStr=["testA","testB","testC"]
lines.filter(F.col('value').isin(*listStr)).show()
</code></pre>
<p>输出:</p>
<pre><code>+ -+
|value|
+ -+
|testA|
|testB|
|testC|
+ -+
</code></pre>