如何编写计算节点度数和计数的猪脚本
Posted
技术标签:
【中文标题】如何编写计算节点度数和计数的猪脚本【英文标题】:How to write pig script for calculating node degree and count 【发布时间】:2014-11-18 20:02:07 【问题描述】:如何为此编写猪脚本?
我有一个文本文件,其中包含彼此为朋友的用户的 ID 例如(data.txt)
id id
1 2
1 3
1 4
2 1
2 5
3 1
4 8
所以用户 id 1 是 3 个人的朋友,用户 id 2 是 2 个人的朋友,依此类推......
我想计算并按降序列出最大好友数以及有多少用户拥有这么多好友
所以是这样的:1 个用户有 3 个朋友,1 个用户有 2 个朋友,2 个用户有 1 个朋友 试图获取这样的列表
number of user number of friends (highest first)
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),还有另外 1 个用户(id 为 2)有两个朋友(id 为 1,5)。所以换句话说,有1个用户有3个朋友,有1个用户有2个朋友,有2个用户有1个朋友 【参考方案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)
【讨论】:
以上是关于如何编写计算节点度数和计数的猪脚本的主要内容,如果未能解决你的问题,请参考以下文章