【问题标题】: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

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 2021-09-26
    • 1970-01-01
    • 2021-06-25
    • 2015-05-15
    • 2021-02-05
    • 1970-01-01
    • 2019-08-29
    • 2020-03-07
    相关资源
    最近更新 更多