Выбор максимального количества столбца с группой по в спарк SQL - PullRequest
0 голосов
/ 13 мая 2018

У меня есть следующие данные:

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 не может использоваться с count в SparkSQL. Как я могу получить желаемый результат, как показано выше?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Это должно работать

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()
0 голосов
/ 13 мая 2018

Часто это делается с помощью 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().

...