2017-11-15 1 views
1

Ich benutze gerade pySpark. Ich habe gerade 2 Tische. Ich möchte sie wie unten gezeigt zweimal beitreten.Kann ich den gleichen 2 Datenrahmen zweimal mit PySpark verbinden?

 
Table 1 (df1) 

sell_product sell_amount buy_product buy_amount    

apple    2   pineapple  3 
pear    1   apple   4 
orange    5   apple   2 
 
Table 2 (df2) 

product price    

apple   $1    
pear   $2    
orange   $3  
pineapple  $4 
 
Result Table 

sell_product sell_amount sell_price  buy_product buy_amount buy_price    

apple    2     $1    pineapple  3  $4 
pear    1     $2    apple   4  $1 
orange    5     $3    apple   2  $1 
df_firstjoin= df1.join(df2.select(col('price').alias('sell_price')),'sell_product'=='product','inner') 

df_twice= df1.firstjoin(df2.select(col('price').alias('buy_price')),'buy_product'=='product','inner') 

Ich frage mich, ob es eine Möglichkeit ist, dass ich sie zur gleichen Zeit beitreten können. Vielen Dank.

Antwort

0

Wenn Sie zwei 'Preis' Spalten hinzufügen, sehe ich keine Möglichkeit, dies mit einem Join zu tun, weil Sie verschiedene Schlüssel in df1 (sell_product und buy_product) verwenden. Die einzige Lösung, die ich mir vorstellen kann, ist nicht ein neues df zu erstellen, sondern dies in einer einzigen Pipeline.

result = df1\ 
.join(df2.select(col('price').alias('sell_price')),'sell_product'=='product','inner') 
.join(df2.select(col('price').alias('buy_price')),'buy_product'=='product','inner') 
Verwandte Themen