我有一個spark.DataFrame被叫events,我想加入另一個spark.DataFrame被叫users。因此,可以events使用兩種不同型別的 Id 在資料幀上識別用戶。資料幀的架構如下所示: 事件:
| ID | 身份型別 | 名稱 | 日期 | 事件型別 |
|---|---|---|---|---|
| 324 | 用戶身份 | 丹尼爾 | 2022-01-15 | 購買 |
| 350 | 用戶身份 | 杰克 | 2022-01-16 | 購買 |
| 3247623322 | 用戶單元 | 米歇爾 | 2022-01-10 | 宣稱 |
用戶:
| ID | 名稱 | 賽爾 |
|---|---|---|
| 324 | 丹尼爾 | 5511737379 |
| 350 | 杰克 | 3247623817 |
| 380 | 米歇爾 | 3247623322 |
我想要做的是left join兩次events資料幀,以便提取所有事件,盡管在資料幀IdType上使用events
我想要的最終資料框必須如下:
| ID | 名稱 | 賽爾 | 日期 | 事件型別 |
|---|---|---|---|---|
| 324 | 丹尼爾 | 5511737379 | 2022-01-15 | 購買 |
| 350 | 杰克 | 3247623817 | 2022-01-16 | 購買 |
| 380 | 米歇爾 | 3247623322 | 2022-01-10 | 宣稱 |
我猜這個連接的 python(PySpark 代碼)可能接近:
(users.join(events, on = [users.Id == events.Id], how = 'left')
.join(events, on = [users.Cel == events.Id], how = 'left'))
uj5u.com熱心網友回復:
您可以使用以下代碼執行此操作
with_id = (users.join(events, on=users["Id"]==events["Id"], how='inner')
.select(events["Id"], events["Name"],"Cel","Date","EventType"))
incorrect_id = (users.join(events, on=users["Id"]==events["Id"], how='leftanti')
.join(events, on=users["Cel"]==events["Id"])
.select(users["Id"], events["Name"],"Cel","Date","EventType"))
result = with_id.unionAll(incorrect_id)
結果
result.show()
--- -------- ---------- ---------- ---------
| Id| Name| Cel| Date|EventType|
--- -------- ---------- ---------- ---------
|324| Daniel|5511737379|2022-01-15| purchase|
|350| Jack|3247623817|2022-01-16| purchase|
|380|Michelle|3247623322|2022-01-10| claim|
--- -------- ---------- ---------- ---------
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/416361.html
標籤:
上一篇:如何安裝NPM依賴項?
下一篇:將唯一值連接到spark資料框中
