2017-09-26 87 views
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重複所以結果是錯誤的,巨大的問題。

我希望每年都聚集學生,按年份統計學生總數,並且重複編號。

我希望問題很清楚。我'新成員 感謝

+0

這似乎並不像熊貓嗎? –

+0

我打電話給Hive表中的數據 – 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