首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于多例的星火sql和

基于多例的星火sql和
EN

Stack Overflow用户
提问于 2018-03-28 00:58:13
回答 1查看 2.5K关注 0票数 2

我正在使用星火数据框架从我的数据中提取一些统计数据。假设我的数据如下:

代码语言:javascript
运行
复制
+----+------------+------+--------+-------+---------+
| 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类型的东西时,我会做这样的事情

代码语言:javascript
运行
复制
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级

结果应该是

代码语言:javascript
运行
复制
+--------+-------+
| player | count |
+--------+-------+
| John   |     2 |
| Adam   |     1 |
| Sarah  |     1 |
| Bruce  |     0 |
+--------+-------+

比方说约翰,他的水平是4级,所以他应该在stage2上玩,根据他在那个舞台上玩过2次的数据,在莎拉的例子中,她是第6级,所以她应该在第3阶段上玩,但她只在第一阶段上玩。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-28 06:06:01

您可以计算最大值,如下所示

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
+------+-----+
|player|count|
+------+-----+
|Sarah |1    |
|John  |2    |
|Adam  |1    |
|Bruce |0    |
+------+-----+
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49524501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档