我有这些数据,并试图解决以下问题。
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()
- groupby id and count unique grade
- 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|
+---+----------+--------------------+