J'ai une exigence où je dois joindre les dataframes A et B et calculer une colonne et utiliser cette valeur calculée dans une autre jointure entre les mêmes 2 dataframes avec des conditions de jointure différentes.

Par exemple.:

 DF_Combined = A_DF.join(B_DF,'Join-Condition',"left_outer").withColumn(col1,'value')

Après avoir fait ce qui précède, je dois faire la même jointure mais utiliser la valeur calculée dans la jointure précédente.

 DF_Final=A_DF.join(B_DF,'New join COndition',"left_outer").withcolumn(col2,DF_Combined.col1*vol1*10)

Lorsque j'essaie de le faire, j'obtiens un problème de produit cartésien.

0
vignesh asokan 22 nov. 2019 à 12:20

1 réponse

Meilleure réponse

Vous ne pouvez pas utiliser une colonne qui n'est pas présente dans le cadre de données. Je veux dire lorsque vous faites A_DF.join(B_DF,... dans le dataframe résultant, vous n'avez que des colonnes de A_DF et B_DF. Si vous voulez avoir la nouvelle colonne, vous devez utiliser DF_Combined.

D'après votre question, je pense que vous n'avez pas besoin d'avoir une autre jointure, mais vous avez 2 options possibles : 1. Lorsque vous vous inscrivez pour la première fois - à cet endroit, calculez vol1*10. 2. Après avoir rejoint, faites DF_Combined.withColumn....

Mais rappelez-vous - withColumn(name, expr) crée une colonne avec une valeur de paramètre name pour aboutir à expr. Donc .withcolumn(DF_Combined.col1,vol1*10) n'a pas de sens.

0
Vladislav Varslavans 22 nov. 2019 à 13:54