scalaDataframe数组中的apache spark计数

o8x7eapl  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(364)

我有2列spark scalaDataframe。第一个是一个变量,第二个是一个字母数组。我要做的是找到一种方法来编码数组中变量的计数(不使用for循环)。
例如,这就是我所拥有的(很抱歉它没有那么整洁,这是我的第一篇文章)。你有5台电脑,每个人用一个字母代表。我想找出一个人(a、b、c、d、e)用过多少台电脑的方法。

+-----------------+--------------+
|       id        |   [person]   |
+-----------------+--------------+
|  Computer 1     |   [A,B,C,D]  |
|  Computer 2     |    [A,B]     |
|  Computer 3     |   [A,B,E]    |
|  Computer 4     |   [A,C,D]    |
|  Computer 5     |  [A,B,C,D,E] |
+-----------------+--------------+

我想编写代码或询问是否有人有解决方案的方法如下:

+---------+-----------+
| Person  |  [Count]  |
+---------+-----------+
|    A    |     5     |
|    B    |     4     |
|    C    |     3     |
|    D    |     3     |
|    E    |     2     |
+---------+-----------+

以某种方式计算Dataframe中数组中的人员。

qpgpyjmq

qpgpyjmq1#

有一个函数叫做 explode 将数组展开为每项的一行:

| id | person

+-----------------+------------------------+

| Computer 1| A |
| Computer 1| B |
| Computer 1| C |
| Computer 1| D |

....
+---+----+----+----+----+

然后你可以按人分组并计数。比如:

val df2 = df.select(explode($"person").as("person"))
val result = df2.groupBy($"person").count

相关问题