如何编写计算节点度数和计数的猪脚本

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)

【讨论】:

以上是关于如何编写计算节点度数和计数的猪脚本的主要内容,如果未能解决你的问题,请参考以下文章

文本消息中字符串的猪计数出现

如何从复杂的猪数据类型中提取简单的猪数据类型

两个表之间的猪拉丁计数差异

如何编写一个 Linux bash 脚本来告诉我 LAN 中哪些计算机处于打开状态?

如何解析 XML 并计算特定节点属性的实例?

如何在我的猪脚本中设置多行字符串?