次のコードを使用して、年間の学生を集計しています。目的は、各年の学生の総数を知ることです。
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'))
結果は次のとおりです。
[年ごとの学生] [1]
私が発見した問題は、非常に多くのIDが繰り返されるため、結果は間違っていて巨大です。
年ごとに生徒を集計し、年ごとに生徒の総数を数え、IDの繰り返しを避けたいと思います。
質問が明確であることを願っています。私は新しいメンバーですありがとう
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()
出力
+----+------------------+
|year|count(DISTINCT id)|
+----+------------------+
|2002| 2|
|2001| 2|
+----+------------------+
次のこともできます。
gr.groupBy("year", "id").count().groupBy("year").count()
このクエリは、年間のユニークな学生を返します。