两列之间的部分匹配
Partial match between two columns
我有两列我想彼此部分匹配。
例如:
A, B
Birmingham Hoover, Hoover Birmingham Area
这两列应该是一个区域的意思,但是用contains函数的时候没捕捉到。不知道有没有函数可以部分匹配这两列?
谢谢。
尝试使用 .rlike
函数。
- split
column B
value by " "
concatinating with |
then matching with rlike, 所以任何 word matches 与 A 列将被过滤掉
Example:
df=spark.createDataFrame([('Birmingham Hoover','Hoover Birmingham Area'),('ABCD',"Z Y Z U")],['A','B'])
df.show()
#+-----------------+----------------------+
#|A |B |
#+-----------------+----------------------+
#|Birmingham Hoover|Hoover Birmingham Area|
#|ABCD |Z Y Z U |
#+-----------------+----------------------+
from pyspark.sql.functions import *
#splitting B col value by " " concatinating with | then matching with rlike
df.withColumn("B",concat_ws("|",split(col("B")," "))).\
filter(expr('A rlike B')).\
show(10,False)
#+-----------------+----------------------+
#|A |B |
#+-----------------+----------------------+
#|Birmingham Hoover|Hoover|Birmingham|Area|
#+-----------------+----------------------+
我有两列我想彼此部分匹配。
例如:
A, B
Birmingham Hoover, Hoover Birmingham Area
这两列应该是一个区域的意思,但是用contains函数的时候没捕捉到。不知道有没有函数可以部分匹配这两列?
谢谢。
尝试使用 .rlike
函数。
- split
column B
value by" "
concatinating with|
then matching with rlike, 所以任何 word matches 与 A 列将被过滤掉
Example:
df=spark.createDataFrame([('Birmingham Hoover','Hoover Birmingham Area'),('ABCD',"Z Y Z U")],['A','B'])
df.show()
#+-----------------+----------------------+
#|A |B |
#+-----------------+----------------------+
#|Birmingham Hoover|Hoover Birmingham Area|
#|ABCD |Z Y Z U |
#+-----------------+----------------------+
from pyspark.sql.functions import *
#splitting B col value by " " concatinating with | then matching with rlike
df.withColumn("B",concat_ws("|",split(col("B")," "))).\
filter(expr('A rlike B')).\
show(10,False)
#+-----------------+----------------------+
#|A |B |
#+-----------------+----------------------+
#|Birmingham Hoover|Hoover|Birmingham|Area|
#+-----------------+----------------------+