web-dev-qa-db-fra.com

Pourquoi agg () dans PySpark ne peut résumer qu'une colonne à la fois?

Pour le cadre de données ci-dessous

df=spark.createDataFrame(data=[('Alice',4.300),('Bob',7.677)],schema=['name','High'])

Lorsque j'essaie de trouver min et max, je n'obtiens qu'une valeur min en sortie.

df.agg({'High':'max','High':'min'}).show()
+-----------+
|min(High)  |
+-----------+
|    2094900|
+-----------+

Pourquoi agg () ne peut-il pas donner à la fois max et min comme dans Pandas?

5
GeorgeOfTheRF

Comme vous pouvez le voir ici :

agg (* exprs)

Calculez les agrégats et renvoie le résultat sous forme de DataFrame.

Les fonctions d'agrégation disponibles sont avg, max, min, sum, count.

Si exprs est un mappage de dict unique d'une chaîne à une autre, la clé est la colonne sur laquelle effectuer l'agrégation et la valeur est la fonction d'agrégation.

Alternativement, exprs peut également être une liste d'expressions de colonnes agrégées.

Paramètres: exprs - un mappage dict du nom de la colonne (chaîne) aux fonctions d'agrégation (chaîne), ou une liste de colonnes.

Vous pouvez utiliser une liste de colonnes et appliquer la fonction dont vous avez besoin sur chaque colonne, comme ceci:

>>> from pyspark.sql import functions as F

>>> df.agg(F.min(df.High),F.max(df.High),F.avg(df.High),F.sum(df.High)).show()
+---------+---------+---------+---------+
|min(High)|max(High)|avg(High)|sum(High)|
+---------+---------+---------+---------+
|      4.3|    7.677|   5.9885|   11.977|
+---------+---------+---------+---------+
23
titiro89