[英]pyspark join with 2 lookup tables
我在兩個查找表中有一個銷售數據和產品詳細信息
df_prod_lookup1
ID product description
1 cereal Minipack
2 canola bottle
4 rice bag
df_prod_lookup2
ID product description
6 glass bottle
8 plants hibiscus
10 tree banyan
sales_df
ID product
10 tree
1 cereal
4 rice
8 plants
預計 output:
ID product description
10 tree banyan
1 cereal Minipack
4 rice bag
8 plants hibiscus
如果 ID 在查找表 1 中不可用,我應該使用查找表 1 和后來的查找表 2
查找表 1 和 2 的列名不同,不能合並為一個。 是否有一種方法可以檢查 ID 在查找表 1 中是否可用,如果沒有則進行連接,然后為銷售中的每條記錄查找表 2? 謝謝。
我只能用一個查找表進行簡單的連接。
df_final = sales_df.join(df_prod_lookup1 on=['ID'], how='left')
問候
先左連接查找表 1,然后左連接查找表 2。
coalesce
function 允許您合並description
字段。
df_prod_lookup1 = df_prod_lookup1.withColumnRenamed("product", "product1").withColumnRenamed("description", "description1")
df_prod_lookup2 = df_prod_lookup2.withColumnRenamed("product", "product2").withColumnRenamed("description", "description2")
from pyspark.sql.functions import coalesce
# Edit based on comments #
sales_df.join(df_prod_lookup1, on=['ID'], how='left')\
.join(df_prod_lookup2, on=['ID'], how='left')\
.withColumn('product', coalesce('product1', 'product2'))\
.withColumn('description', coalesce('description1', 'description2'))\
.drop('product1', 'product2', 'description1', 'description2').show()
+---+-------+-----------+
| ID|product|description|
+---+-------+-----------+
| 8| plants| hibiscus|
| 1| cereal| Minipack|
| 10| tree| banyan|
| 4| rice| bag|
+---+-------+-----------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.