Spark SQL:查找最大值和按键分组的总和
Spark SQL: find maximum and sum grouped by key
我有一个具有以下架构的 Spark DataFrame。
counts
|-- index: string
|-- name: string
|-- count: long
我想对每个 index
的 count
列求和,并找出最大值 count
及其对应的 name
。因此每一行将包含一个唯一的 index
和 SUM(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")。
我有一个具有以下架构的 Spark DataFrame。
counts
|-- index: string
|-- name: string
|-- count: long
我想对每个 index
的 count
列求和,并找出最大值 count
及其对应的 name
。因此每一行将包含一个唯一的 index
和 SUM(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")。