繁体   English   中英

如何在 pyspark 中将 LIKE 运算符用作 JOIN 条件作为列

[英]How to use LIKE operator as a JOIN condition in pyspark as a column

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

JOIN a and b ON a.name = b.name AND a.number= b.number AND a.city LIKE b.city

例如:

表一:

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

表 b:

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

结果

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

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

df.where(col('col1').like("%string%")).show()

但它需要一个字符串,在我的情况下,我想将它作为一个列。 类似于以下内容:

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

对此的任何帮助将不胜感激!

尝试使用表达式:

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")
)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM