首页 > 解决方案 > Spark:如何按列对数据框进行分组

问题描述

我有这个数据框“df”:

国家 顾客 全部的
英国 约翰 4
法国 莎莉 3
英国 约翰 2
法国 莎莉 1

我想创建一个名为“out”的新df,其中我将“Country”列分组为行,将“customer”列分组。单元格应显示总和:

国家 约翰 莎莉
英国 6 0
法国 0 4

我知道如何按行分组:

out = df.groupby.("Country").agg(sum("total"))

但我不知道如何按列中的“客户”列进行分组(保持第一列名为“国家”。

谢谢!

标签: dataframeapache-spark

解决方案


如果你有这个数据集,看起来你想旋转你的数据:

+-------+------+-------+
|Product|Amount|Country|
+-------+------+-------+
| Banana|  1000|    USA|
|Carrots|  1500|    USA|
|  Beans|  1600|    USA|
| Orange|  2000|    USA|
| Orange|  2000|    USA|
| Banana|   400|  China|
|Carrots|  1200|  China|
|  Beans|  1500|  China|
| Orange|  4000|  China|
| Banana|  2000| Canada|
|Carrots|  2000| Canada|
|  Beans|  2000| Mexico|
+-------+-----+-------+

并希望像这样旋转它:

+-------+------+-----+------+----+
|Product|Canada|China|Mexico| USA|
+-------+------+-----+------+----+
| Orange|  null| 4000|  null|4000|
|  Beans|  null| 1500|  2000|1600|
| Banana|  2000|  400|  null|1000|
|Carrots|  2000| 1200|  null|1500|

我认为这是您想要的方式,那么您需要像这样运行您的代码:

val pivotDF = df.groupBy("Product").pivot("Country").sum("Amount")
pivotDF.show()

供参考:点击这里


推荐阅读