在Scala DataFrame数组中计数

时间:2019-02-21 01:26:10

标签: scala apache-spark dataframe apache-spark-sql

我有2列Spark Scala DataFrame。第一个是一个变量,第二个是字母数组。我正在尝试做的是找到一种方法来对数组中的变量进行计数(不使用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     |
+---------+-----------+

以某种方式计算数据框内数组中的人员。

1 个答案:

答案 0 :(得分:0)

有一个名为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