2017-09-26 90 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