Ajouter une somme de colonnes en tant que nouvelle colonne dans la structure de données PySpark
Je suis en utilisant PySpark et j'ai une Étincelle dataframe avec un tas de colonnes numériques. Je veux ajouter une colonne qui est la somme de toutes les autres colonnes.
Suppose que mon dataframe avait les colonnes "a", "b" et "c". Je sais que je peux le faire:
df.withColumn('total_col', df.a + df.b + df.c)
Le problème est que je ne veux pas le type de chaque colonne individuellement et de les ajouter, surtout si j'ai beaucoup de colonnes. Je veux être capable de faire cela automatiquement ou en spécifiant une liste de noms de colonnes que je veux ajouter. Est-il une autre façon de le faire?
source d'informationauteur plam
Vous devez vous connecter pour publier un commentaire.
Ce n'était pas évident. Je ne vois pas de ligne de base de la somme des colonnes définies dans l'étincelle Dataframes API.
Version 2
Cela peut être fait d'une manière assez simple:
df.columns
est fourni par pyspark comme une liste de chaînes de caractères donnant tous les noms de colonne dans l'Étincelle Dataframe. Pour un montant différent, vous pouvez fournir toute autre liste de noms de colonne de la place.Je n'ai pas essayer ce que ma première solution parce que je n'étais pas certaine de comment il allait se comporter. Mais il fonctionne.
Version 1
C'est trop compliqué, mais fonctionne aussi bien.
Vous pouvez faire ceci:
df.columns
pour obtenir une liste des noms des colonnesAvec python réduireune certaine connaissance de la façon dont la surcharge d'opérateur fonctionne, et la pyspark code pour les colonnes ici qui devient:
Note c'est un python de réduire, et non une étincelle RDD réduire, et la parenthèse terme dans le second paramètre pour réduire nécessite la parenthèse parce que c'est un générateur de liste d'expression.
Testé, Fonctionne!
Mon problème était similaire à celle ci-dessus (peu plus complexe) que j'ai dû ajouter consécutives colonne sommes que de nouvelles colonnes dans PySpark dataframe. Cette approche utilise un code de Paul Version 1 ci-dessus:
ajouter de nouvelles colonnes qui sont des sommes cumulées (consécutifs):
df.show()
de "montant cumulatif des" colonnes ajoutées sont comme suit: