Объединить два столбца данных без повторяющихся комбинаций - PullRequest
0 голосов
/ 25 марта 2019

Я хочу присоединиться к столбцу "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|
 +---+----+----+---+

Ответы [ 3 ]

1 голос
/ 25 марта 2019

Наиболее оптимизированный способ для достижения этой цели - использование ВЛЕВОЕ ПОЛУ. СОЕДИНЕНИЕ -

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()
0 голосов
/ 25 марта 2019

Использование drop_duplicates()

out= df1.join(df2,  df2.item==df1.item, 'inner').drop_duplicates()
0 голосов
/ 25 марта 2019

Попробуйте это:

выберите разные a.id, a.item, b.id, b.item от df1 a внутреннее соединение df2 b на a.item = b.item заказ по a.item;

Это определенно решит вашу проблему.

...