簡體   English   中英

如何根據使用 Pyspark 的條件從另一個表更新 Spark DataFrame 表的列值

[英]How to update Spark DataFrame Column Values of a table from another table based on a condition using Pyspark

我想比較 pyspark 中的 2 個數據幀。

下面是我的測試用例數據集(來自谷歌)。

所以我有2個df

  1. 基礎DF
  2. 次要DF

基本DF

No,Name,Sal,Address,Dept,Join_Date
11,Sam,1000,ind,IT,2/11/2019
22,Tom,2000,usa,HR,2/11/2019
33,Kom,3500,uk,IT,2/11/2019
44,Nom,4000,can,HR,2/11/2019
55,Vom,5000,mex,IT,2/11/2019
66,XYZ,5000,mex,IT,2/11/2019

秒DF

No,Name,Sal,Address,Dept,Join_Date
11,Sam,1000,ind,ITA,2/11/2019
22,Tom,2500,usa,HRA,2/11/2019
33,Kom,3000,uk,ITA,2/11/2019
44,Nom,4600,can,HRA,2/11/2019
55,Vom,8000,mex,ITA,2/11/2019
77,XYZ,5000,mex,ITA,2/11/2019

我必須將 secDF 和 baseDF 與 2 個鍵(No 和 Name)進行比較,如果這些字段匹配(我只需要來自 secDF 的匹配記錄),那么我必須使用來自 secDF 的值更新 baseDF 的工資和部門字段

預期 output

No,Name,Sal,Address,Dept,Join_Date
11,Sam,1000,ind,ITA,2/11/2019
22,Tom,2500,usa,HRA,2/11/2019
33,Kom,3000,uk,ITA,2/11/2019
44,Nom,4600,can,HRA,2/11/2019
55,Vom,8000,mex,ITA,2/11/2019
66,XYZ,5000,mex,IT,2/11/2019

使用 pyspark 我可以使用 subtract() 來查找 table2 中不存在的 table1 的值,然后使用 unionAll 兩個表,或者我應該使用 withcolumn 覆蓋滿足條件的值。

有人可以建議這樣做的好方法嗎?

更新 --- 我必須將 secDF 和 baseDF 與 2 個鍵(No 和 Name)進行比較,如果這些字段匹配(我只需要 secDF 中的匹配記錄),那么我必須使用來自的值更新 baseDF 的工資和部門字段秒DF。

您可以進行左連接並合並生成的 Sal 列,其中 secdf 優先於 basedf:

import pyspark.sql.functions as F

result = basedf.alias('basedf').join(
    secdf.alias('secdf'),
    ['No', 'Name'],
    'left'
).select(
    [F.coalesce('secdf.Sal', 'basedf.Sal').alias('Sal')
     if c == 'Sal'
     else F.coalesce('secdf.Dept', 'basedf.Dept').alias('Dept')
     if c == 'Dept'
     else f'basedf.{c}'
     for c in basedf.columns]
)

result.show()
+---+----+----+-------+----+---------+
| No|Name| Sal|Address|Dept|Join_Date|
+---+----+----+-------+----+---------+
| 11| Sam|1000|    ind| ITA|2/11/2019|
| 22| Tom|2500|    usa| HRA|2/11/2019|
| 33| Kom|3000|     uk| ITA|2/11/2019|
| 44| Nom|4600|    can| HRA|2/11/2019|
| 55| Vom|8000|    mex| ITA|2/11/2019|
| 66| XYZ|5000|    mex|  IT|2/11/2019|
+---+----+----+-------+----+---------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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