如何在Pig和Hive中找到第n个最大和最小的数字?

jgzswidk  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(316)

我有一个列id、名称和薪水的表,我想从表中找出最大和最小薪水的第n个数字

Id Name Salary
--------------
1  aa   11111
--------------
2  bb   77777
-------------
3 cc 33333
-------------
4 dd 44444
-------------
5 ee 99999
6qqygrtg

6qqygrtg1#

您可以使用limit或rank。使用limit,加载数据,按降序对其排序,以获得顺序中最大的工资。将数据限制为第n条记录。这将为您提供n条记录,其中第n条记录将位于数据集的底部。再次按升序排序,将第n条记录作为最上面的记录,然后再次使用limit来获取最上面的记录。对于最小的记录,请使用类似的步骤。如果按升序排序,请限制到第n条记录,然后再次按降序和limit 1排序。

A = LOAD 'data.txt' USING PigStorage(',') AS (id:int,name:chararray,salary:int);
B = ORDER A BY Salary DESC;
C = LIMIT B 4; --Note: N = 4
D = ORDER C BY salary ASC;
E = LIMIT D 1;
dced5bon

dced5bon2#

在Hive中:
第n个最高工资
查询:

select id,name,salary from (
select id,name,salary,rank() over(ORDER BY salary DESC)ran from salarytable ) s 
where ran=1;

输出:

5 ee 99999

第n分钟工资
查询:

select id,name,salary from (
select id,name,salary,rank() over(ORDER BY salary ASC)ran from salarytable ) s 
where ran=4;

输出:

4 dd 4444

p、 学生:是的 rank() 的数字将定义此处的第n个值。

相关问题