我想加入两个数据框的“项目”列。
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|
+---+----+----+---+
答案 0 :(得分:1)
实现这一目标的最优化方法是使用 LEFT SEMI JOIN -
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()
答案 1 :(得分:0)
尝试一下:
选择不同的a.id,a.item,b.id,b.item 来自df1 a 内部连接df2 b 在a.item = b.item上 按a.item排序;
它肯定会解决您的问题。
答案 2 :(得分:0)
使用drop_duplicates()
out= df1.join(df2, df2.item==df1.item, 'inner').drop_duplicates()