Hadoop 如何编写计算节点度和计数的pig脚本
如何为此编写pig脚本 我有一个文本文件,其中包含彼此是朋友的用户ID 例如(data.txt) 所以用户id 1是3人的朋友,用户id 2是2人的朋友,依此类推 我想计算并按降序列出最大的朋友数以及有多少用户拥有这么多的朋友 就像这样:1个用户有3个朋友,1个用户有2个朋友,2个用户有1个朋友 试图得到这样的列表Hadoop 如何编写计算节点度和计数的pig脚本,hadoop,apache-pig,Hadoop,Apache Pig,如何为此编写pig脚本 我有一个文本文件,其中包含彼此是朋友的用户ID 例如(data.txt) 所以用户id 1是3人的朋友,用户id 2是2人的朋友,依此类推 我想计算并按降序列出最大的朋友数以及有多少用户拥有这么多的朋友 就像这样:1个用户有3个朋友,1个用户有2个朋友,2个用户有1个朋友 试图得到这样的列表 number of user number of friends (highest first) 1 3 1
number of user number of friends (highest first)
1 3
1 2
2 1
非常感谢您的帮助您能试试这个吗
input.txt
1 2
1 3
1 4
2 1
2 5
3 1
4 8
PigScript:
A = LOAD 'input.txt' USING PigStorage() AS(id:int,friends:int);
B = GROUP A BY id;
C = FOREACH B GENERATE FLATTEN(COUNT(A.friends)) AS cnt;
D = GROUP C BY cnt;
E = FOREACH D GENERATE COUNT(C.cnt),group;
F = ORDER E BY group DESC;
DUMP F;
输出:
(1,3)
(1,2)
(2,1)
在输出中,为什么用户1要来2次,1-3,1-2?输出是这样的1-3,2-2,3-1,4-1吗?您能确认吗?在输出中,1表示用户数(不是id)。因此,在数据集中,有一个id为1的用户有3个朋友(id为2,3,4),还有一个用户(id为2)有两个朋友(id为1,5)。换句话说,有1个用户有3个朋友,有1个用户有2个朋友,有2个用户有1个朋友
(1,3)
(1,2)
(2,1)