首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala - groupBy和计数每个值的实例

Scala - groupBy和计数每个值的实例
EN

Stack Overflow用户
提问于 2018-08-29 23:49:47
回答 1查看 1.3K关注 0票数 1

我有一个txn DF,我想计算两个类别(Cat1和Cat2)下每个DataFrame的数量。

代码语言:javascript
复制
DF                                
+------------+-------+
|  Category  |  txn  | 
+-----===----+-------+  
|  Cat1      |   A   |  
|  Cat2      |   A   |
|  Cat1      |   B   |
|  Cat1      |   C   |
|  Cat2      |   D   |
|  Cat1      |   D   |
|  Cat2      |   C   |
|  Cat1      |   D   |
|  Cat1      |   A   |
|  Cat2      |   C   |
|  Cat1      |   D   |
|  Cat1      |   A   |
|  Cat2      |   B   |
|  Cat1      |   C   |
|  Cat2      |   D   |
+------------+-------+

代码:

代码语言:javascript
复制
DF.groupBy("category_name").agg(count("txn").as("txn_count")).show(false)

但这只给了我每个类别的总数。

期望输出:(格式无关紧要,只需要计数)

代码语言:javascript
复制
+------------+---------------------+
|  Category  |     txn_count       | 
+-----===----+---------------------+  
|  Cat1      | A(3),B(1),C(2),D(3) |  
|  Cat2      | A(1),B(1),C(2),D(2) |
+------------+---------------------+

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-29 23:57:58

您可以先按两列分组(使用count),然后仅按Category分组(使用collect_list):

代码语言:javascript
复制
import org.apache.spark.sql.functions._
import spark.implicits._

val result = DF
  .groupBy("Category", "txn").count()
  .groupBy("Category").agg(collect_list(struct("txn", "count")) as "txn_count")

result.show(false)
// prints:
// +--------+--------------------------------+
// |Category|txn_count                       |
// +--------+--------------------------------+
// |Cat2    |[[D, 2], [C, 2], [B, 1], [A, 1]]|
// |Cat1    |[[D, 3], [C, 2], [B, 1], [A, 3]]|
// +--------+--------------------------------+
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52081529

复制
相关文章

相似问题

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