Spark聚合,其中输出列为函数,行为列

问题描述 投票:1回答:1

我想在数据框中的不同列上计算一堆不同的agg函数。

我知道我可以做这样的事情,但是输出全都是一行。

df.agg(max("cola"), min("cola"), max("colb"), min("colb"))

假设我将在10个不同的列上执行100个不同的聚合。

我希望输出数据框像这样-

      |Min|Max|AnotherAggFunction1|AnotherAggFunction2|...etc..
cola  | 1 | 10| ... 
colb  | 2 | NULL| ... 
colc  | 5 | 20| ... 
cold  | NULL | 42| ... 
...

我的行是我正在执行聚合的每一列,而我的列是聚合函数。例如,如果我不计算colb max,某些区域将为空。

我该如何完成?

python apache-spark pyspark pyspark-sql pyspark-dataframes
1个回答
0
投票

您可以创建一个Map列,例如Metrics,其中键是列名,其值是聚合的结构(最大值,最小值,平均值,...)。我正在使用map_from_entries函数创建一个地图列(可从Spark 2.4+获得)。然后,只需分解地图即可获得所需的结构。

以下是您可以适应您的要求的示例:

map_from_entries
© www.soinside.com 2019 - 2024. All rights reserved.