J'utilise le code suivant pour regrouper les étudiants chaque année. Le but est de connaître le nombre total d'étudiants pour chaque année.
from pyspark.sql.functions import col
import pyspark.sql.functions as fn
gr = Df2.groupby(['Year'])
df_grouped =
gr.agg(fn.count(col('Student_ID')).alias('total_student_by_year'))
Le résultat est :
[étudiants par année] [1]
Le problème que j'ai découvert que tant d'identifiants se répètent Donc, le résultat est faux et énorme.
Je veux regrouper les étudiants par année, compter le nombre total d'étudiants par année et éviter la répétition des pièces d'identité.
J'espère que la question est claire. Je suis nouveau membre Merci
Utilisez la fonction countDistinct
from pyspark.sql.functions import countDistinct
x = [("2001","id1"),("2002","id1"),("2002","id1"),("2001","id1"),("2001","id2"),("2001","id2"),("2002","id2")]
y = spark.createDataFrame(x,["year","id"])
gr = y.groupBy("year").agg(countDistinct("id"))
gr.show()
sortie
+----+------------------+
|year|count(DISTINCT id)|
+----+------------------+
|2002| 2|
|2001| 2|
+----+------------------+
Vous pouvez aussi faire:
gr.groupBy("year", "id").count().groupBy("year").count()
Cette requête renvoie les étudiants uniques par an.