Объединить два искровых кадра данных на основе столбца - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть 2 кадра данных, которые мне нужно объединить на основе столбца (код сотрудника).Обратите внимание, что в фрейме данных содержится около 75 столбцов, поэтому я предоставляю пример набора данных, чтобы получить некоторые предложения / примеры решений.Я использую блоки данных, и наборы данных считываются с S3.

Ниже приведены мои 2 кадра данных:

DATAFRAME - 1

|-----------------------------------------------------------------------------------|
|EMP_CODE   |COLUMN1|COLUMN2|COLUMN3|COLUMN4|COLUMN5|COLUMN6|COLUMN7|COLUMN8|COLUMN9|
|-----------------------------------------------------------------------------------|
|A10001     |   B   |       |       |       |       |       |       |       |       |
|-----------------------------------------------------------------------------------|


DATAFRAME - 2
|-----------------------------------------------------------------------------------|
|EMP_CODE   |COLUMN1|COLUMN2|COLUMN3|COLUMN4|COLUMN5|COLUMN6|COLUMN7|COLUMN8|COLUMN9|
|-----------------------------------------------------------------------------------|
|A10001     |       |       |       |       |   C   |       |       |       |       |   
|B10001     |       |       |       |       |       |       |       |       |T2     |
|A10001     |       |       |       |       |       |       |       |   B   |       |
|A10001     |       |       |   C   |       |       |       |       |       |       |
|C10001     |       |       |       |       |       |   C   |       |       |       |
|-----------------------------------------------------------------------------------|   

Мне нужно объединить 2 кадра данных на основе EMP_CODE, в основном объединить dataframe1 с dataframe2на основе emp_code.Я получаю дубликаты столбцов, когда я выполняю объединение, и мне нужна помощь.

Ожидаемый окончательный кадр данных:

|-----------------------------------------------------------------------------------|
|EMP_CODE   |COLUMN1|COLUMN2|COLUMN3|COLUMN4|COLUMN5|COLUMN6|COLUMN7|COLUMN8|COLUMN9|
|-----------------------------------------------------------------------------------|
|A10001     |   B   |       |   C   |       |   C   |       |       |   B   |       |   
|B10001     |       |       |       |       |       |       |       |       |T2     |
|C10001     |       |       |       |       |       |   C   |       |       |       |
|-----------------------------------------------------------------------------------|       

В dataframe1 есть 3 строки с emp_code A10001 и 1строка в dataframe2.Все данные должны быть объединены в одну запись без повторяющихся столбцов.

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

вы можете использовать внутреннее соединение

output = df1.join(df2,['EMP_CODE'],how='inner')

, также вы можете применить отличительные в конце, чтобы удалить дубликаты.

output = df1.join(df2,['EMP_CODE'],how='inner').distinct()
0 голосов
/ 22 декабря 2018

Сначала вам нужно объединить отдельные кадры данных.

from pyspark.sql import functions as F
df1 = df1.groupBy('EMP_CODE').agg(F.concat_ws(" ", F.collect_list(df1.COLUMN1)))

вы должны написать это для всех столбцов и для всех кадров данных.Затем вам нужно будет использовать функцию объединения на всех фреймах данных.

df1.union(df2)

, а затем повторить ту же агрегацию на этом фрейме данных объединения.

0 голосов
/ 20 декабря 2018

Вы можете использовать приведенный ниже код, если оба df имеют некоторое имя столбца ключа соединения

df1.join(df2, "EMP_CODE")
...