hive的分组取前n个值

比如说有两个班级,A班和B班

Class  score

A       10

A       7

A       9

B       5

B       6

B       3

所谓的开窗函数的开窗就是把所有的A和所有的B往两个地方进行处理,像是送到两个窗口进行处理。

 

Hadoop会把所有A和所有B两块数据进行处理,保证每块数据都在同一个reduce上面进行处理,为什么会这样呢,因为使用了分区函数partition by class

不过两块数据也可能在同一个reduce上面执行,也可能不会

这里的作用就是partition by这个函数做到的

hive的分组取前n个值_第1张图片

hive的分组取前n个值_第2张图片


合起来的一个字段就当作一个分区进行处理,然后对该分区的asso_access_num进行排序处理,然后每个分区进行排序后再合在起来,然后rownum进行依次的判断,

第一个是A则rownum=1

第二个是A则rownum=2

第三个是A则rownum=3

第四个是B,因为class变了,所以rownum又变为1,rownum=1

第五个是B则rownum=2,依次类推

如果你要得到前面两条的话,就写rownum<=2即可,那么rownum=3的这条数据就不会进行获取

可以参考:

http://msdn.microsoft.com/zh-cn/library/ms186734.aspx

http://www.cnblogs.com/85538649/archive/2011/08/13/2137277.html

你可能感兴趣的:(hadoop)