两列之间部分匹配

问题描述

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

例如:

A,B
Birmingham Hoover,Hoover Birmingham Area

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

谢谢。

解决方法

尝试使用 .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|
#+-----------------+----------------------+

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...