我有以下名为“data”的数据集:
+---------+-------------+------+
| name | subject| mark |
+---------+-------------+------+
| Anna| math| 80|
| Vlad| history| 67|
| Jack| art| 78|
| David| math| 71|
| Monica| art| 65|
| Alex| lit| 59|
| Mark| math| 82|
+---------+-------------+------+
我想做一个Map缩小的工作。
结果如下:
Anna, David : 1
Anna, Mark : 1
David, mark: 1
Vlad, None : 1
Jack, Monica: 1
Alex, None : 1
我试着做到以下几点:
new_data = data.select(['name', 'subject']).show()
+---------+-------------+
| name | subject|
+---------+-------------+
| Anna| math|
| Vlad| history|
| Jack| art|
| David| math|
| Monica| art|
| Alex| lit|
| Mark| math|
+---------+-------------+
data_new.groupBy('name','subject').count().show(10)
然而,这个命令并没有给出我所需要的。
2条答案
按热度按时间zbdgwd5y1#
您可以使用subject进行自左连接,获得不同的对,并添加一列
1
.iqjalb3h2#
过程可以是:
在数组中对具有相同主题的学生进行分组
打电话给
udf
函数创建数组项排列添加一列,显示每个主题的数字
呼叫
explode
函数为数组中的每个项分别创建3行让我们一步一步地做:第一步:分组
第二步:
udf
功能步骤3:为每个主题创建一个新的数字值列
步骤4:创建单独的行