Join 在不重复组合的情况下连接两个数据帧列

Join 在不重复组合的情况下连接两个数据帧列,join,pyspark,inner-join,Join,Pyspark,Inner Join,我想加入两个数据帧的“item”列 Dataframe1(df1) id item 1 1 1 2 1 2 Dataframe2(df2) _id item 44 1 44 2 44 2 为了返回匹配的值,我尝试了内部联接 out= df1.join(df2, df2.item==df1.item, 'inner') +---+----+----+---+ | id|item|item|_id| +---+-

我想加入两个数据帧的“item”列

Dataframe1(df1)
id    item
 1      1
 1      2 
 1      2

Dataframe2(df2)
_id    item
 44    1
 44    2
 44    2
为了返回匹配的值,我尝试了内部联接

 out= df1.join(df2,  df2.item==df1.item, 'inner')
 +---+----+----+---+
 | id|item|item|_id|
 +---+----+----+---+
 |  1| [1]| [1]| 44|
 |  1| [2]| [2]| 44|
 |  1| [2]| [2]| 44|
 |  1| [2]| [2]| 44|
 |  1| [2]| [2]| 44|
 +---+----+----+--- 
但我希望得到如下结果,不包括重复匹配组合

+---+----+----+---+
 | id|item|item|_id|
 +---+----+----+---+
 |  1| [1]| [1]| 44|
 |  1| [2]| [2]| 44|
 |  1| [2]| [2]| 44|
 +---+----+----+---+
另一个例子可能是

Dataframe1(df1)
id    item
 1      1
 1      2 
 1      1

Dataframe2(df2)
_id    item
 44    1
 44    2
结果应该是

+---+----+----+---+
| id|item|item|_id|
 +---+----+----+---+
 |  1| [1]| [1]| 44|
 |  1| [2]| [2]| 44|
 +---+----+----+---+
试试这个:

选择不同的a.id、a.item、b.id、b.item 来自DF1A 内连接df2 b 在a.item=b.item上 按项目订购

它肯定会解决您的问题。

使用
删除重复项()


实现这一点的最佳方法是使用左半连接

df1 = spark.createDataFrame([(1,1),(1,2),(1,2)],['id','item'])
df2 = spark.createDataFrame([(44,1),(44,2),(44,2)],['id','item'])

df1.join(df2,  df2.item==df1.item, 'left_semi').show()
df1 = spark.createDataFrame([(1,1),(1,2),(1,2)],['id','item'])
df2 = spark.createDataFrame([(44,1),(44,2),(44,2)],['id','item'])

df1.join(df2,  df2.item==df1.item, 'left_semi').show()