【问题标题】:Spark: How to group the dataframe in columnsSpark:如何按列对数据框进行分组
【发布时间】:2021-10-29 03:57:28
【问题描述】:
我有这个数据框“df”:
| Country |
customer |
total |
| England |
John |
4 |
| France |
Sally |
3 |
| England |
John |
2 |
| France |
Sally |
1 |
我想创建一个名为“out”的新 df,其中我将“Country”列分组为行,将“customer”列分组。单元格应显示总和:
| Country |
John |
Sally |
| England |
6 |
0 |
| France |
0 |
4 |
我知道如何按行分组:
out = df.groupby.("Country").agg(sum("total"))
但我不知道如何按列中的“客户”列进行分组(保持第一列名为“国家”。
谢谢!
【问题讨论】:
标签:
dataframe
apache-spark
【解决方案1】:
您似乎想要转置您的数据
想象一下,如果你有这个数据集:
+-------+------+-------+
|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()
供参考:Click Here