簡體   English   中英

使用“條件”條件連接 Pyspark 中的表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM