Est-il possible d'alias des colonnes par programmation dans spark sql?
Spark SQL (peut-être seulement HiveQL) on peut faire:
select sex, avg(age) as avg_age
from humans
group by sex
ce qui entraînerait une DataFrame
avec des colonnes nommées "sex"
et "avg_age"
.
Comment peut - avg(age)
être un alias de "avg_age"
sans l'aide textuelle SQL?
Edit:
Après zero323 's réponse, j'ai besoin d'ajouter la contrainte:
La colonne qui sera rebaptisé du nom ne peut pas être connu/garanti ou même adressable. Textuelle SQL, en utilisant la fonction "select EXPR comme NOM" supprime l'exigence d'avoir un nom intermédiaire de EXPR. C'est également le cas dans l'exemple ci-dessus, où "avg(age)" pourrait obtenir une variété d'auto-généré (les noms qui varient également d'un pays étincelle rejets et sql-contexte backends).
source d'informationauteur Prikso NAI
Vous devez vous connecter pour publier un commentaire.
Supposons que
human_df
est le DataFrame pour les humains. Depuis Étincelle 1.3:Si vous préférez renommer une seule colonne, il est possible d'utiliser
withColumnRenamed
méthode:Alternativement, vous pouvez utiliser
alias
méthode:Vous pouvez aller plus loin avec petit helper:
S'avère
def toDF(colNames: String*): DataFrame
est exactement ce que fait. Coller à partir de 2.11.7 documentation:Anonyme colonnes, comme celui qui serait généré par
avg(age)
sansAS avg_age
obtenir les noms attribués automatiquement. Comme vous le soulignez dans votre question, les noms sont spécifiques à l'implémentation, généré par une stratégie de nommage. Si nécessaire, vous pouvez écrire du code qui renifle l'environnement et instancie une découverte appropriée & renommer une stratégie basée sur la stratégie de nommage. Il n'y a pas beaucoup d'entre eux.Spark 1.4.1 avec
HiveContext
le format est "_cN" où N est la position de l'anonyme de la colonne dans la table. Dans votre cas, le nom serait_c1
.