我有兩個這樣的資料框:
我有兩個這樣的資料框:
df2.show()
---- ------- ------
|姓名|余額|工資|
---- ------- ------
|Pan| 11| 500|
|Liza| 20| 900|
---- ------- ------
df3.show()
---- ------- ------
|名稱|余額|工資|
---- ------- ------
|Pan| 10| 700|
| 卡爾| 70| 888|
---- ------- ------
df2這里,代表現有的資料庫記錄,df3代表新的記錄/更新的記錄(任何列),需要插入/更新到db.For ex: NAME=PPan新的余額是10如df3。因此,對于NAME=PPan,整個行必須在df2中被替換,對于NAME=Cal,必須添加一個新行,對于name=Liza將不被觸及,像這樣:
---- ------- ------
|姓名|余額|工資|
---- ------- ------
|Pan| 10| 700|
|Liza| 20| 900|
| 卡爾| 70| 888|
---- ------- ------
我怎樣才能實作這個用例?
uj5u.com熱心網友回復:
首先,你需要使用full方法連接兩個資料框架,以保持未匹配的記錄(新的),并更新匹配的記錄,我更喜歡使用select與coalesce函式:
joined_df = df2.alias('rec').join(df3. alias('upd'), on='NAME', how='full')
# ---- ------- ------ ------- ------
# |NAME|BALANCE|SALARY|BALANCE|SALARY|
# ---- ------- ------ ------- ------
# |Cal |null |null |70 |888 |>
# |Liza|20 |900 |null |null |>
# |PPan|11 |500 |10 |700 |>
# ---- ------- ------ ------- ------
output_df = joined_df.selectExpr(
'NAME'。
'COALESCE(upd.BALANCE, rec.BALANCE) BALANCE'。
'COALESCE(upd.SALARY, rec.SALARY) SALARY',
)
output_df.sort('BALANCE').show(truncate=False)
---- ------- ------
|名稱|余額|工資|
---- ------- ------
|Pan|10 |700|
|Liza|20 |900|
|Cal |70 |888 |
---- ------- ------
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/310739.html
標籤:
