Dataframe pyspark与2个查找表连接
我在两个查找表中有一个销售数据和产品详细信息 df_产品查找1Dataframe pyspark与2个查找表连接,dataframe,join,pyspark,Dataframe,Join,Pyspark,我在两个查找表中有一个销售数据和产品详细信息 df_产品查找1 ID product description 1 cereal Minipack 2 canola bottle 4 rice bag df_产品查找2 ID product description 6 glass bottle 8 plants hibiscus 10 tree
ID product description
1 cereal Minipack
2 canola bottle
4 rice bag
df_产品查找2
ID product description
6 glass bottle
8 plants hibiscus
10 tree banyan
销售部
ID product
10 tree
1 cereal
4 rice
8 plants
预期产出:
ID product description
10 tree banyan
1 cereal Minipack
4 rice bag
8 plants hibiscus
如果查找表1中没有ID,我应该使用查找表1和更高版本的查找表2
查找表1和2的列名不同,不能合并为一个。
tehre是一种检查lookuptable 1中是否有ID的方法,如果没有,则对sales中的每个记录进行联接,然后查找表2吗?谢谢
我只能用一个查找表进行简单的联接
df_final = sales_df.join(df_prod_lookup1 on=['ID'], how='left')
首先使用查找表1左连接,然后使用查找表2左连接。
合并
功能允许您合并说明
字段
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|
+---+-------+-----------+
事实上,我不明白为什么要在查找表中重命名产品。我必须首先签入lookuptable 1,然后如果ID不是tehre,我必须签入lookuptable 2,以从查找中获取产品和描述以及其他列。你能解释一下吗?谢谢,这三个表的列名都相同。如果我在不重命名的情况下加入,则生成的数据帧将具有不明确的列名。如果您可以同时在
ID
和product
上加入,则只需重命名description
。但在问题中,您只通过ID
加入,因此我重命名了其他两列。谢谢@Cena。这意味着,我必须更改列名,但ID应该更改,对吗?谢谢@Cena。但当您加入时,您只删除了“product1”和“product2”?是这样吗?join(df_prod_lookup1,on=['ID'],how='left')。drop('product1')?我想加入ID并从查找中获取产品和描述。是的@Lilly,我正在从查找表中删除product
字段。我已编辑代码,从查找表中获取产品
和说明
。重命名列可以避免这种名称歧义。