python - 如何在pyspark中计算groupBy后的唯一ID

标签 python pyspark apache-spark-sql

我使用以下代码来汇总每年的学生。目的是了解每年的学生总数。

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'))

问题是我发现很多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|
+----+------------------+

关于python - 如何在pyspark中计算groupBy后的唯一ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46421677/

相关文章:

python - 如何从 PySpark Dataframe 中删除重复项并将剩余列值更改为 null

python - 在 pyspark 中应用用户定义聚合函数的替代方法

apache-spark - 动态分区修剪不清楚

python - 用于重命名模型和关系字段的 Django 迁移策略

python - Pandas 从具有名称列表的列中获取最常见的名称

apache-spark - 来自 .. 错误有效负载 : '400' t active 的无效状态代码 "requirement failed: Session isn'

java - 一次性生成多个过滤器的架构

apache-spark - 为什么 Spark 在使用 DataFrame 时会报告 "java.net.URISyntaxException: Relative path in absolute URI"?

python - 如何在 Django URLpatterns 中根据请求方法分派(dispatch)?

Python - 将 x 行 csv 文件写入 json 文件