【发布时间】:2018-03-28 00:58:13
【问题描述】:
我正在使用 Spark 数据框从我的数据中提取一些统计信息。 假设我的数据是这样的:
+----+------------+------+--------+-------+---------+
| 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
当level > 20 stage应该是5
结果应该是这样的
+--------+-------+
| player | count |
+--------+-------+
| John | 2 |
| Adam | 1 |
| Sarah | 1 |
| Bruce | 0 |
+--------+-------+
假设约翰,他的等级是 4,所以他应该在 stage2 上演奏,根据他在那个舞台上演奏 2 次的数据,在 Sarah 的情况下,她是 6 级,所以她应该在 Stage 3 上演奏,但她只在舞台上演奏第一阶段
【问题讨论】:
-
舞台栏你已经搞定了吗?
-
@ShankarKoirala 是的,我在第一个表中的每一列都做了
-
那么计数值是怎么计算的?
-
假设 John,他的等级是 4,所以他应该在 stage2 上演奏,根据他在那个舞台上演奏 2 次的数据,在 Sarah 的情况下,她是 6 级,所以她应该在 stage 3 上演奏但她只在那个舞台上演奏过一个
-
布鲁斯呢,怎么 0?
标签: apache-spark apache-spark-sql