我有两列要相互部分匹配。
例如:
A, B
Birmingham Hoover, Hoover Birmingham Area
这两列应该表示一个区域,但是当使用包含功能时,它并不能捕获该区域。你知道我是否可以部分匹配这两栏?
谢谢。
答案 0 :(得分:0)
尝试使用 .rlike
功能。
column B
的值,方法是" "
加上|
,然后与rlike匹配,因此任何 word匹配与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|
#+-----------------+----------------------+