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> 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> Cependant, je continue à obtenir l'erreur suivante: p> 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|
+--------+---------+-----+----+-----------+
3 Réponses :
aliasing serait nécessaire si vous avez besoin des colonnes de C'est aussi la raison pour laquelle, dans deux DataFrames différents ayant le même nom code>. 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. P>
SQL code>, la requête
SELECT CODE> SANS FONCTIONNEMENT SANS ALLIATIONS, mais si vous deviez faire un
Créer une table comme sélectionnez code >, il lancerait une erreur comme -
de colonnes en double code>. p>
Avez-vous essayé d'utiliser SEQ dans Spark Dataframe.
1.Utilisation de la SEQ Sans colonne en double p> blockQuote>
xxx pré>
- alias après avec column, mais il générera une colonne en double li> ol> blockQuote>
xxx pré> p>
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 ")" "
L'expression peut être utilisée pour rejoindre:
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.