Spark SQL:查找按键分组的最大值和总和

时间:2016-10-05 16:25:43

标签: sql apache-spark-sql spark-dataframe

我有一个带有以下架构的Spark DataFrame。

counts
 |-- index: string
 |-- name: string
 |-- count: long

我想对每个count的{​​{1}}列求和,并找到最大index及其对应的count。因此,每一行都会包含一个唯一的name indexSUM(count)和相应的MAX(count)

我按name对条目进行分组,并通过运行以下查询选择index最高的行。

count

此工作正常,并为每个SELECT * FROM counts WHERE (index, count) IN ( SELECT index, MAX(count) FROM counts GROUP BY index ) ORDER BY count DESC 提供了一个唯一的行,其中包含index最高的行。

但是,我想根据原始表格添加一个包含按count分组的count总和的列。

我可以对视图计数求和,并使用此查询按index对其进行分组:

index

但是我希望有一个包含两个查询结果的统一表(以有效的方式查询)。

非常感谢有关此事的任何建议。

1 个答案:

答案 0 :(得分:1)

只需使用窗口功能:

SELECT c.*
FROM (SELECT c.*, SUM(count) OVER (PARTITION BY index) as cnt,
             ROW_NUMBER() OVER (PARTITION BY index ORDER BY count DESC) as seqnum
      FROM counts c
     ) c
WHERE seqnum = 1;

这假设您要保留其他列。如果您只想要每个index的最大值和总和:

SELECT index, MAX(count), SUM(count)
FROM counts
GROUP BY index;

并且index是列的错误名称,因为它是一个SQL关键字(想想"创建索引")。