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

Spark SQL: find maximum and sum grouped by key

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

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

我想对每个 indexcount 列求和,并找出最大值 count 及其对应的 name。因此每一行将包含一个唯一的 indexSUM(count)MAX(count) 以及相应的 name.

我按 index 对条目进行分组,select 具有最高 count 的行按 运行 以下查询进行分组。

SELECT * FROM counts 
WHERE (index, count) 
IN (
    SELECT index, MAX(count) 
    FROM counts
    GROUP BY index
)
ORDER BY count DESC

这很好用,每个 index 给我一个唯一的行,其中包含最高 count 的行。

但是,我想添加一个包含 count 的总和的列,该列基于原始 table.

index 分组

我可以使用此查询对观看次数求和并按 index 对它们进行分组:

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

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

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

只需使用window个函数:

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 关键字(想想 "create index")。