我正在使用星火数据框架从我的数据中提取一些统计数据。假设我的数据如下:
+----+------------+------+--------+-------+---------+
| id | date | type | player | level | stage |
+----+------------+------+--------+-------+---------+
| 1 | 2018-03-26 | XXX | John | 4 | stage_2 |
| 2 | 2018-03-26 | YYY | Adam | 1 | stage_1 |
| 3 | 2018-03-26 | ZZZ | Sarah | 6 | stage_3 |
| 4 | 2018-03-26 | XXX | Bruce | 12 | stage_2 |
| 5 | 2018-03-26 | YYY | Sarah | 6 | stage_1 |
| 6 | 2018-03-26 | ZZZ | John | 4 | stage_2 |
+----+------------+------+--------+-------+---------+我想在这里数数一些数据,例如,当我想计算我每天有多少次使用XXX类型的东西时,我会做这样的事情
dataframe.groupBy(date).agg(expr("sum(case when type = 'XXX'then 1 else 0 end) as XXX_Count"))但是我不知道我应该为更复杂的用例做些什么。
假设我想根据他/她的水平来计算每个球员在最高阶段所能打的次数
我需要这个
当第1至第3阶段之间的水平应为1
3至6级之间的水平应为2
6至12级之间的水平应为3
12级至20级之间的水平应为4级
当级别> 20级时应为5级
结果应该是
+--------+-------+
| player | count |
+--------+-------+
| John | 2 |
| Adam | 1 |
| Sarah | 1 |
| Bruce | 0 |
+--------+-------+比方说约翰,他的水平是4级,所以他应该在stage2上玩,根据他在那个舞台上玩过2次的数据,在莎拉的例子中,她是第6级,所以她应该在第3阶段上玩,但她只在第一阶段上玩。
发布于 2018-03-28 06:06:01
您可以计算最大值,如下所示
val level = col("level")
val expr = when((level >= 1 && level < 3), 1)
.when((level >= 3 && level < 6), 2)
.when((level >= 6 && level < 12), 3)
.when((level >= 12 && level < 20), 4)
.when(level > 20, 5)
.otherwise(0)
df.withColumn("max", expr)
.withColumn("stage", split($"stage", "_")(1))
.withColumn("max", when($"stage" === $"max", 1).otherwise(0))
.groupBy($"player").agg(sum($"max"))
.show(false)输出:
+------+-----+
|player|count|
+------+-----+
|Sarah |1 |
|John |2 |
|Adam |1 |
|Bruce |0 |
+------+-----+https://stackoverflow.com/questions/49524501
复制相似问题