Python 在apache spark中查找groupby之后的总计数和项目数

Python 在apache spark中查找groupby之后的总计数和项目数,python,apache-spark,Python,Apache Spark,我需要找到每个类别的设备类型实体的平均数量 我已将数据读入csv文件,并从该csv文件中创建了一个数据框,其中包含类别和设备类型 我阅读了数据帧: test_df.groupby('category').count().show() 它显示“类别”列和“计数”列 如何获得: “类别”列中分组的项目总数,以及 计数列中所有项目的总和 我需要: 读这两个,然后 取计数列所有行中的项目总数,然后 除以“类别”列中的项目数 演示: >>> df.show() +--------

我需要找到每个
类别的
设备类型
实体的平均数量

我已将数据读入csv文件,并从该csv文件中创建了一个数据框,其中包含
类别
设备类型

我阅读了数据帧:

test_df.groupby('category').count().show()
它显示“类别”列和“计数”列

如何获得:

  • “类别”列中分组的项目总数,以及
  • 计数列中所有项目的总和
我需要:

  • 读这两个,然后
  • 取计数列所有行中的项目总数,然后
  • 除以“类别”列中的项目数
演示:

>>> df.show()
+--------+---+
|category|val|
+--------+---+
|    cat1| 13|
|    cat2| 12|
|    cat3| 23|
|    cat1| 20|
|    cat1| 10|
|    cat2| 30|
|    cat3| 11|
|    cat1|  7|
+--------+---+

>>> res = df.groupBy('category').count()
>>> res.show()
+--------+-----+
|category|count|
+--------+-----+
|    cat2|    2|
|    cat3|    2|
|    cat1|    4|
+--------+-----+

>>> res.groupBy().agg({"category":"count","count":"sum"}).show()
+----------+---------------+
|sum(count)|count(category)|
+----------+---------------+
|         8|              3|
+----------+---------------+
更新:

from pyspark.sql.functions import *

>>> res.groupBy() \
...    .agg({"category":"count","count":"sum"}) \
...    .withColumnRenamed("sum(count)","sum_cats") \
...    .withColumnRenamed("count(category)","uniq_cats") \
...    .select("uniq_cats","sum_cats",expr("sum_cats/uniq_cats as avg_cats")) \
...    .show()
+---------+--------+------------------+
|uniq_cats|sum_cats|          avg_cats|
+---------+--------+------------------+
|        3|       8|2.6666666666666665|
+---------+--------+------------------+

你能提供一个小的可复制数据集和期望的数据集(输出)吗?试图澄清你的问题,但仍然不清楚你想问什么。您的问题最初以“and”结尾,因此还不清楚您是否列出了要列出的步骤。感谢您提供的解决方案。你能帮我找出平均值吗?是总和/计数还是8/3。谢谢你能告诉我是否有任何中值函数用于上述数据吗?