如何使用 LIKE 运算符作为 pyspark 中的 JOIN 条件作为列

Coo*_*son 6 python apache-spark apache-spark-sql pyspark aws-glue

我想在 pyspark 中执行以下操作(对于 AWS Glue 作业):

JOIN a and b ON a.name = b.name AND a.number= b.number AND a.city LIKE b.city
Run Code Online (Sandbox Code Playgroud)

例如:

表一:

数字 姓名 城市
1000 鲍勃 %
2000年 伦敦

表b:

数字 姓名 城市
1000 鲍勃 波士顿
1000 鲍勃 柏林
2000年 巴黎

结果

数字 姓名 城市
1000 鲍勃 波士顿
1000 鲍勃 柏林

所以我不知道该怎么做的部分是实现通配符“%”并使用 LIKE 运算符。我知道你可以.like()在字符串上使用,例如:

df.where(col('col1').like("%string%")).show()
Run Code Online (Sandbox Code Playgroud)

但它需要一个字符串,在我的例子中我想把它作为一个列。像下面这样:

result = a.join(
    b,
    (a.name == b.name) &
    (a.number == b.number) &
    (a.city.like(b.city)) # <-- This doesnt work since it is not a string
Run Code Online (Sandbox Code Playgroud)

任何帮助做到这一点将不胜感激!

mck*_*mck 5

尝试使用表达式:

import pyspark.sql.functions as F

result = a.alias('a').join(
    b.alias('b'),
    (a.name == b.name) &
    (a.number == b.number) &
    F.expr("b.city like a.city")
)
Run Code Online (Sandbox Code Playgroud)

我认为你的意思是这样做b like a,而不是a like b因为它%在表a中。