两列之间部分匹配

时间:2020-08-10 20:00:24

标签: apache-spark pyspark apache-spark-sql pyspark-dataframes

我有两列要相互部分匹配。

例如:

A, B
Birmingham Hoover, Hoover Birmingham Area

这两列应该表示一个区域,但是当使用包含功能时,它并不能捕获该区域。你知道我是否可以部分匹配这两栏?

谢谢。

1 个答案:

答案 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|
#+-----------------+----------------------+