【发布时间】:2021-03-11 11:54:09
【问题描述】:
我想在 pyspark 中执行以下操作(用于 AWS Glue 作业):
JOIN a and b ON a.name = b.name AND a.number= b.number AND a.city LIKE b.city
例如:
表a:
| Number | Name | City |
|---|---|---|
| 1000 | Bob | % |
| 2000 | Joe | London |
表 b:
| Number | Name | City |
|---|---|---|
| 1000 | Bob | Boston |
| 1000 | Bob | Berlin |
| 2000 | Joe | Paris |
结果
| Number | Name | City |
|---|---|---|
| 1000 | Bob | Boston |
| 1000 | Bob | Berlin |
所以我不知道该怎么做的部分是实现通配符“%”并使用 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
对此的任何帮助将不胜感激!
【问题讨论】:
-
@blackbishop 感谢您的建议,现在我知道了,但是当我搜索时我不知道 expr() 可以用作连接中的条件,所以下面的答案可能对像我这样的人有用:)
-
IMO不是重复的,因为这里涉及到join,而且join表达式也有错误。
标签: python apache-spark pyspark apache-spark-sql aws-glue