Слияние 2-х датафреймов в Писпарке - PullRequest
0 голосов
/ 21 октября 2018

У меня есть 2 кадра данных, например:

DF1:

Id | field_A | field_B | field_C | field_D
 1 |   cat   |  12     |   black | 11
 2 |   dog   | 128     |   white | 19
 3 |   dog   |  35     |  yellow | 20
 4 |   dog   |  21     |   brown |  4
 5 |  bird   |  10     |    blue |  7
 6 |   cow   |  99     |   brown | 34

DF2:

Id | field_B | field_C | field_D | field_E
 3 |  35     |  yellow | 20      |   123   
 5 |  10     |    blue |  7      |   454   
 6 |  99     |   brown | 34      |   398   

И после слияния влево я надеюсь получитьследующий фрейм данных:

Id | field_A | field_B | field_C | field_D | field_E
 1 |   cat   |  12     |   black | 11      |
 2 |   dog   | 128     |   white | 19      |
 3 |   dog   |  35     |  yellow | 20      |  123
 4 |   dog   |  21     |   brown |  4      |  
 5 |  bird   |  10     |    blue |  7      |  454
 6 |   cow   |  99     |   brown | 34      |  398

Но я получаю следующий фрейм данных:

Id | field_A | field_B | field_C | field_D | field_E 
 3 |   dog   |  35     |  yellow | 20      |  123
 5 |  bird   |  10     |    blue |  7      |  454
 6 |   cow   |  99     |   brown | 34      |  398

Я использую следующий синтаксис:

new_df = df1.join(df2, on=['field_B', 'field_C', 'field_D'], how='left_outer')

I 'м работает на свечах 2.2.Может кто-нибудь сказать, пожалуйста, почему это происходит?Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Исходя из этого ответа, вы должны использовать функцию unionDFs по ссылке ниже, а затем groupby.https://stackoverflow.com/a/50665187/6645617

и вот пример кода для этого:

from pyspark.sql.functions import first

unionDF = unionDFs(DF1,DF2)
firstCols = [first(col).alias(str(col)) for col in unionDF.columns[1:]]

finalDF = unionDF.groupby("Id").agg(*firstCols)
0 голосов
/ 22 октября 2018

Размещенный вами фрагмент кода работает совершенно нормально.Похоже, порядок соединения отличается от того, который вы указали в своем вопросе.Попробуйте
df2.join(df1, on='field_B', 'field_C', 'field_D'], how='left')

Если это сработает, ваш порядок данных в кадрах отличается от того, что вы показали здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...