如何在Apache Pig中使用Top()方法?

时间:2016-06-15 02:58:09

标签: hadoop apache-pig

有人可以帮我理解pig中的top()函数。实际上我对top()的参数感到困惑。 请用一个例子来解释。

2 个答案:

答案 0 :(得分:2)

Top()函数用于获取您提到的Top特定数量的元组。

假设你有一些架构让我们说 (ID,年龄,姓名)

Dataset:
(1,22,k)
(2,23,j)
(3,22,l)
(4,24,m)
(5,23,n)
(6,24,o)
(7,22,p)
(8,23,q)
(9,24,r)

现在只需加载此文件:

A =Load ..
B= Group A by age;
C = Foreach B {
top = TOP(2,0,A)
Generate top;
}

输出:

({(7,22,p),(3,22,l)})
({(8,23,q),(5,23,n)})
({(9,24,r),(6,24,o)})

每个年龄段的前2名记录。

TOP(2,0,A) implies TOP(topN,column,relation)

所以在这里我们说根据0列是id的前两条记录。所以两个记录从每个年龄开始具有更高(顶部)id。

请回复我以获取更多查询。 :-) 快乐学习。

答案 1 :(得分:1)

如果你只想获取一个包的前N个元组。然后使用TOP()

A = LOAD 'file.txt' USING PigStorage(',') AS (col1:int,col2:int);
file.txt    
(1001,800)
(1001,800)
(1001,800)
(1002,900)
(1003,900)
(1003,900)
(1004,1800)
(1005,1800)

B = GROUP A BY (col1);

(1001,{(1001,800),(1001,800),(1001,800)})
(1002,{(1002,900)})
(1003,{(1003,900),(1003,900)})
(1004,{(1004,1800)})
(1005,{(1005,1800)})

top_data = FOREACH B { top = TOP(1, 1, A); GENERATE FLATTEN(top);};

TOP()之后的输出,第一个arg是前N,即 1 ,第二个arg是列号。即 1 ,第三个是关系名称,即 A

(1001,800)
(1002,900)
(1003,900)
(1004,1800)
(1005,1800)