You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SparkSQL无聚合函数GROUP BY效果实现咨询(不使用dropDuplicates)

SparkSQL实现无聚合GROUP BY全字段去重的方案

以下方案均不使用dropDuplicates方法,纯SparkSQL原生语法实现:

方案1:使用DISTINCT关键字(最简便)

直接用标准SQL的去重语法,效果和全字段GROUP BY完全一致:

SELECT DISTINCT city, year, count
FROM input;

方案2:搭配聚合函数实现GROUP BY逻辑

SparkSQL要求SELECT字段要么在GROUP BY子句中,要么被聚合函数包裹。由于同分组内所有字段值完全相同,任选MAX/MIN等聚合函数包裹字段即可,也支持按位置索引的GROUP BY写法:

-- 写法1:显式声明字段
SELECT city, year, MAX(count) AS count
FROM input
GROUP BY city, year, count;

-- 写法2:按位置索引分组,和普通SQL写法兼容
SELECT city, year, MAX(count) AS count
FROM input
GROUP BY 1,2,3;

-- 写法3:多字段场景下简化写法,无需逐个声明字段
SELECT MAX(struct(*)).*
FROM input
GROUP BY city, year, count;

方案3:使用窗口函数实现(可扩展自定义去重规则)

如果后续需要自定义重复数据的选取规则,可通过ROW_NUMBER()窗口函数实现:

SELECT city, year, count
FROM (
  SELECT
    *,
    ROW_NUMBER() OVER(PARTITION BY city, year, count ORDER BY city) AS rn
  FROM input
) tmp
WHERE rn = 1;

同分区内所有分组字段值一致,排序字段可任意选择,不影响去重结果。

内容的提问来源于stack exchange,提问作者Driss NEJJAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:18:05