Scala - groupBy и количество экземпляров каждого значения - PullRequest
0 голосов
/ 29 августа 2018

У меня есть DataFrame DF, и я хочу посчитать количество каждого txn в 2 категориях (Cat1 и Cat2).

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   |
+------------+-------+

Код:

DF.groupBy("category_name").agg(count("txn").as("txn_count")).show(false)

Но это дает мне общее количество для каждой категории.

Желаемый вывод: (формат не имеет значения, просто нужно количество)

+------------+---------------------+
|  Category  |     txn_count       | 
+-----===----+---------------------+  
|  Cat1      | A(3),B(1),C(2),D(3) |  
|  Cat2      | A(1),B(1),C(2),D(2) |
+------------+---------------------+

Заранее спасибо.

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете сначала сгруппировать по обоим столбцам (используя count), а затем сгруппировать только по Category (используя collect_list):

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]]|
// +--------+--------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...