Pyspark:如果列包含来自另一列的字符串(SQL LIKE 语句),则过滤数据框

2024-03-28

我正在尝试按以下方式过滤我的 pyspark 数据框:我有一列包含long_text和一列包含数字。如果长文本包含number我想保留这个专栏。 我正在尝试使用 SQLLIKE声明,但似乎我无法将其应用到另一列(此处number) 我的代码如下:

from pyspark.sql.functions import regexp_extract, col, concat, lit
from pyspark.sql.types import *
PN_in_NC = (df
        .filter(df.long_text.like(concat(lit("%"), df.number, lit("%"))))))

我收到以下错误:Method like([class org.apache.spark.sql.Column]) does not exist.

我尝试了多种方法来修复它(例如创建'%number%'字符串作为过滤器之前的列,不使用lit, using '%' + number + '%')但没有任何作用。如果LIKE无法应用于其他列,是否有其他方法可以做到这一点?


您可以使用contains功能。

from pyspark.sql.functions import *
df1 = spark.createDataFrame([("hahaha the 3 is good",3),("i dont know about 3",2),("what is 5 doing?",5),\
("ajajaj 123",2),("7 dwarfs",1)], ["long_text","number"]) 
df1.filter(col("long_text").contains(col("number"))).show()

long_text 列应包含数字列中的数字。

Output:

+--------------------+------+
|           long_text|number|
+--------------------+------+
|hahaha the 3 is good|     3|
|    what is 5 doing?|     5|
|          ajajaj 123|     2|
+--------------------+------+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pyspark:如果列包含来自另一列的字符串(SQL LIKE 语句),则过滤数据框 的相关文章

随机推荐