![](/img/trans.png)
[英]How to use join on 3 tables with conditions in pyspark? (Multiple tables)
[英]Join tables in Pyspark with "conditional" conditions
我有兩個要加入的表:
表十:
國家 | 城市 | 用戶 |
---|---|---|
美國 | 波士頓 | 大衛 |
美國 | 邁阿密 | 約翰 |
法國 | 巴黎 | 彼得 |
表 Y:
國家 | 細節 | 價值 | ID |
---|---|---|---|
美國 | 城市 | 波士頓 | 1 |
美國 | 無效的 | 無效的 | 2 |
法國 | 無效的 | 無效的 | 3 |
這是我想要的輸出:
國家 | ID | 城市 | 用戶 |
---|---|---|---|
美國 | 1 | 波士頓 | 大衛 |
美國 | 2 | 無效的 | 大衛 |
美國 | 2 | 無效的 | 約翰 |
法國 | 3 | 無效的 | 彼得 |
我在 SQL 中得到這個的方法是:
select country, id, city, user
from X
join Y
on x.country = y.country
and if(y.detail='city', x.city=y.value, TRUE)
我怎樣才能進入 pyspark?
您可以使用下面的代碼執行此操作,但是我必須選擇y.value
並將其別名為 city 以獲得您的示例輸出。
d1 = [
('USA', 'Boston', 'David'),
('USA', 'Miami', 'John'),
('France', 'Paris', 'Peter')
]
d2 = [
('USA', 'city', 'Boston', 1),
('USA', None, None, 2),
('France', None, None, 3)
]
x = spark.createDataFrame(d1, ['country', 'city', 'user'])
y = spark.createDataFrame(d2, ['country', 'detail', 'value', 'id'])
cond = (x.country == y.country) & (when(y.detail == 'city', x.city == y.value).otherwise(F.lit(True)))
x.join(y, on=cond).select(x.country, y.id, y.value.alias('city'), x.user).orderBy('id').show()
+-------+---+------+-----+
|country| id| city| user|
+-------+---+------+-----+
| USA| 1|Boston|David|
| USA| 2| null|David|
| USA| 2| null| John|
| France| 3| null|Peter|
+-------+---+------+-----+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.