如何在pyspark中使用like操作符作为连接条件作为列

nvbavucw  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(257)

我想在pyspark中执行以下操作(用于aws胶水作业):

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

例如:
表a:
numbernamecity1000bob%2000joelondon公司
表b:
2000年的1000个Bobber到1000个Bobber
结果
编号:1000Bobberston1000Bobberlin
所以我不知道怎么做的部分是实现通配符“%”,并使用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

任何帮助做这将是非常感谢!

vq8itlhq

vq8itlhq1#

尝试使用表达式:

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 因为 % 在表a中。

相关问题