J'utilise le code suivant pour obtenir l'âge moyen des personnes dont le salaire est supérieur à un certain seuil.
dataframe.filter(df['salary'] > 100000).agg({"avg": "age"})
l'âge de la colonne est numérique (float) mais je reçois toujours cette erreur.
py4j.protocol.Py4JJavaError: An error occurred while calling o86.agg.
: scala.MatchError: age (of class Java.lang.String)
Connaissez-vous un autre moyen d'obtenir la moyenne etc. sans utiliser la fonction groupBy
et les requêtes SQL.
La fonction d'agrégation doit être une valeur et un nom de colonne une clé:
dataframe.filter(df['salary'] > 100000).agg({"age": "avg"})
Vous pouvez également utiliser pyspark.sql.functions
:
from pyspark.sql.functions import col, avg
dataframe.filter(df['salary'] > 100000).agg(avg(col("age")))
Il est également possible d'utiliser CASE .. WHEN
from pyspark.sql.functions import when
dataframe.select(avg(when(df['salary'] > 100000, df['age'])))