pypark 中的数据帧 - 如何将聚合函数应用于两列?



我在pyspark中使用Dataframe。我有一张桌子,像下面的表1。我需要获取表 2。哪里:

  • num_category - 这是每个ID有多少个不同的类别
  • sum(count( - 它是表 1 中每个 id 的第三列的总和。

例:

表1

id   |category | count 
1    |    4    |   1 
1    |    3    |   2
1    |    1    |   2
2    |    2    |   1
2    |    1    |   1

表2

id   |num_category| sum(count) 
1    |    3       |   5 
2    |    2       |   2

我尝试:

table1 = data.groupBy("id","category").agg(count("*"))
cat = table1.groupBy("id").agg(count("*"))
count = table1.groupBy("id").agg(func.sum("count"))
table2 = cat.join(count, cat.id == count.id)

错误:

1 table1 = data.groupBy("id","category").agg(count("*"))
---> 2 cat = table1.groupBy("id").agg(count("*"))
count = table1.groupBy("id").agg(func.sum("count"))
table2 = cat.join(count, cat.id == count.id)
TypeError: 'DataFrame' object is not callable

您可以对单个分组数据执行多列聚合,

data.groupby('id').agg({'category':'count','count':'sum'}).withColumnRenamed('count(category)',"num_category").show()
+---+-------+--------+
| id|num_cat|sum(cnt)|
+---+-------+--------+
|  1|      3|       5|
|  2|      2|       2|
+---+-------+--------+

最新更新