2017-09-26 16 views
1

私は次のコードを使って1年に学生を集めています。目的は、毎年の学生の総数を知ることです。pysparkのgroupByの後にユニークIDをカウントするには

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の繰り返しを控えたいと思います。

私は質問がはっきりしていることを願っています。新しいメンバーI'am おかげ

+0

これは、パンダのように見えるしていませんか? –

+0

ハイブテーブルからデータを呼び出しました – Lizou

答えて

3

使用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| 
+----+------------------+ 
+0

ありがとうございました! – Lizou

+0

完全性のために、 '.alias()'を使って列の名前を変更することもできます。 – niczky12

関連する問題