我有一个带有以下架构的Spark DataFrame。
counts
|-- index: string
|-- name: string
|-- count: long
我想对每个count
的{{1}}列求和,并找到最大index
及其对应的count
。因此,每一行都会包含一个唯一的name
index
,SUM(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
但是我希望有一个包含两个查询结果的统一表(以有效的方式查询)。
非常感谢有关此事的任何建议。
答案 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关键字(想想"创建索引")。