0
votes

Comment utiliser une colonne que j'ai créée dans une jointure d'étincelle? - erreur ambiguë

Je me suis battu avec cela pendant un moment dans Scala et je ne peux pas sembler trouver une solution claire pour cela.

J'ai 2 dataframes: p> xxx pré> xxx pré>

J'ai besoin de créer une colonne dans les entreprises em> qui me permettent de Rejoignez la table de recherche. C'est un cas simple em> énoncé qui vérifie si le mouvement est négatif, puis vendez, sinon acheter. J'ai alors besoin de rejoindre la table de recherche sur cette colonne nouvellement créée. p> xxx pré>

Cependant, je continue à obtenir l'erreur suivante: p> xxx pré>

J'ai essayé d'ajouter l'alias pour le code, mais ça Ne fonctionne pas: p>

val joined = Companies.as("Companies")
    .withColumn("_Code",expr("CASE WHEN movement > 0 THEN 'B' ELSE 'S' END")).as("Code")
    .join(LookUpTable.as("LookUpTable"), $"LookUpTable.Code" === $"Code", "left_outer")


joined.show()

+--------+---------+-----+----+-----------+
|movement|  Company|_Code|Code|Description|
+--------+---------+-----+----+-----------+
|       8|    Yahoo|    B|   B|        Buy|
|       8|    Yahoo|    B|   S|       Sell|
|      -5|   Google|    S|   B|        Buy|
|      -5|   Google|    S|   S|       Sell|
|      12|Microsoft|    B|   B|        Buy|
|      12|Microsoft|    B|   S|       Sell|
|     -10|     Uber|    S|   B|        Buy|
|     -10|     Uber|    S|   S|       Sell|
+--------+---------+-----+----+-----------+


0 commentaires

3 Réponses :


0
votes

aliasing serait nécessaire si vous avez besoin des colonnes de deux DataFrames différents ayant le même nom . En effet, Spark Dataframe API crée un schéma pour ledit Dataframe, et dans un schéma donné, vous ne pouvez jamais avoir deux colonnes ou plus de même nom.

C'est aussi la raison pour laquelle, dans SQL , la requête SELECT SANS FONCTIONNEMENT SANS ALLIATIONS, mais si vous deviez faire un Créer une table comme sélectionnez , il lancerait une erreur comme - de colonnes en double .


0 commentaires

0
votes

Avez-vous essayé d'utiliser SEQ dans Spark Dataframe.

1.Utilisation de la SEQ Sans colonne en double xxx

  1. alias après avec column, mais il générera une colonne en double xxx

3 commentaires

Merci mahesh. La deuxième option me permet-elle d'avoir plusieurs alias avec le même nom? c'est-à-dire `` `` Val rejoint = sociétés.WithColumn ("Code", Expr ("Case quand Mouvement> 0 puis 'B' d'autre 's' s 'fin")). En tant que ("Sociétés") EXPR ("Garniture (Description)")) Sélectionnez ($ "Sociétés.code", $ Entreprises.description ")` `` ``


@Nirmie vole et accepte la réponse si elle est satisfaite de vos besoins.


@Nirmie Vous avez juste besoin de garder la dernière fois. ("Sociétés") pas besoin de chaque fois pour nous .as ("sociétés") donc ce serait comme ça "` `" Val rejoint = sociétés.withcolumn ("Code", Expr ("Cas lors du mouvement> 0 puis 'B' sinon 's' s 'fin"))). Sans column ("Description", EXPR ("Garniture (Description)"))). Comme ("Sociétés" ( "Lookuptable"), $ "hookuptable.code" === $ "Entreprises.code", "GAUCHE_OUTER") .Sélectionnez ($ "Companies.Code", $ Entreprises.description ")" "



0
votes

L'expression peut être utilisée pour rejoindre: xxx


1 commentaires

Merci Pacha701. Cela peut fonctionner, mais sur notre projet, nous avons plus de 2000 expressions à devoir les créer sans contention peut être un peu difficile.