在spark sql中选择具有group by的count列的最大值

时间:2018-05-13 18:54:33

标签: sql group-by apache-spark-sql

我有以下数据:

yr char cnt
1   a   27
1   g   20
3   b   50
3   z   70

我喜欢获得年份,只有cnt字段的最大数量。即,

yr char count
1   a   27
3   z   70

我尝试使用如下的SQL:

SELECT yr, char, max(count(cnt)) as count
FROM view
GROUP BY yr,char

但是它导致了一个错误,说max不能与SparkSQL中的count一起使用。如何获得我想要的结果如上所示?

2 个答案:

答案 0 :(得分:1)

这应该有效

sql("select a.yr, a.char, a.cnt from view a join (select yr, max(cnt) as cnt  from view group by yr) b on a.yr = b.yr and b.cnt = a.cnt").show()

答案 1 :(得分:0)

这通常是使用row_number()

完成的
select yr, char, cnt
from (select yr, char, count(*) as cnt,
             row_number() over (partition by yr order by count(*) desc) as seqnum
      from view
      group by yr, char
     ) yc
where seqnum = 1;

注意:如果是关系,则会返回其中任意一个。如果您想要所有这些内容,请使用rank()dense_rank()