我想分组id和计数唯一的等级,并返回max

  • 本文关键字:max 返回 唯一 id python pyspark
  • 更新时间 :
  • 英文 :


我有这些数据,并试图解决以下问题。

DataFrame_from_Scratch = spark。createDataFrame(价值观、列)DataFrame_from_Scratch.show ()

columns = ['id', 'grade', 'date']
values = [('101','good','2022/06/01'), 
('102','good','2022/06/01'), ('103','fail','2022/06/02'), 
('104','poor','2022/06/02'),('101','good','2022/06/08'), 
('101','excellent','2022/06/14'),('102','poor','2022/06/10'), 
('104','good','2022/06/09'),('102','poor','2022/06/13'), 
('103','fail','2022/06/14')]
df.groupby(F.col('id')).agg(F.countDistinct(F.col('grade'))).show()
  1. groupby id and count unique grade
  2. groupby id和日期,以及有多少个唯一的日期

你对第一个问题的实现是正确的。不确定你的问题到底在寻找什么作为答案

但是,下面是其他子部分的答案——

数据准备

columns = ['id', 'grade', 'date']
values = [('101','good','2022/06/01'), 
('102','good','2022/06/01'), ('103','fail','2022/06/02'), 
('104','poor','2022/06/02'),('101','good','2022/06/08'), 
('101','excellent','2022/06/14'),('102','poor','2022/06/10'), 
('104','good','2022/06/09'),('102','poor','2022/06/13'), 
('103','fail','2022/06/14')]
sparkDF = sql.createDataFrame(values,columns)
sparkDF.show()
+---+---------+----------+
| id|    grade|      date|
+---+---------+----------+
|101|     good|2022/06/01|
|102|     good|2022/06/01|
|103|     fail|2022/06/02|
|104|     poor|2022/06/02|
|101|     good|2022/06/08|
|101|excellent|2022/06/14|
|102|     poor|2022/06/10|
|104|     good|2022/06/09|
|102|     poor|2022/06/13|
|103|     fail|2022/06/14|
+---+---------+----------+

唯一等级计数

sparkDF.groupBy(F.col('id')).agg(F.countDistinct(F.col('grade')).alias('Distinct Grade Count')).show()
+---+--------------------+
| id|Distinct Grade Count|
+---+--------------------+
|101|                   2|
|104|                   2|
|102|                   2|
|103|                   1|
+---+--------------------+

Maximum -假设最大日期

sparkDF.groupBy(F.col('id')).agg(F.max(F.col('Date')).alias('Max Date')).show()
+---+----------+
| id|  Max Date|
+---+----------+
|101|2022/06/14|
|102|2022/06/13|
|103|2022/06/14|
|104|2022/06/09|
+---+----------+

独特日期

不确定这背后的意图,因为这根据你的数据集没有意义,因为你的粒度级别是-id&Date

sparkDF.groupBy(['id','Date']).agg(F.countDistinct(F.col('grade')).alias('Distinct Grade Count')).orderBy('id').show()
+---+----------+--------------------+
| id|      Date|Distinct Grade Count|
+---+----------+--------------------+
|101|2022/06/14|                   1|
|101|2022/06/01|                   1|
|101|2022/06/08|                   1|
|102|2022/06/13|                   1|
|102|2022/06/01|                   1|
|102|2022/06/10|                   1|
|103|2022/06/14|                   1|
|103|2022/06/02|                   1|
|104|2022/06/09|                   1|
|104|2022/06/02|                   1|
+---+----------+--------------------+

最新更新