整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

16.7.2每个人都在和我说话:Twitter回复关系图

hadoop 花牛 11℃ 0评论

        Twitter允许你回复其他人的消息,从而参与谈论。因为这是一种明显的公众行为,所以回复就代表一种强的“社会性标记”(social token):它表明对 别人谈论事情感兴趣,并表明这种兴趣值得转播。 处理过程的第一步是用Wukong完成的,Wukong是面向HadoopRuby程序库。它能让我们编写出处理吁13级数据流的小巧的程序。以下代码片断取 自一个用于表示twitter消息(tweet)的类:

class Tweet < Struct.new(:tweet_id, :screen_name, :created_at,
:reply_tweet_id, :reply_screen_name, :text) 
def initialize(raw_tweet)
# ... gory details of parsing raw tweet omitted 
end

   

 # Tweet is a reply if there's something in the reply_tweet_id slot 
    def is_reply?
        not reply_tweet_id.blank?
    true 
end

Twitter的Stream API可以让大家轻松得到千兆字节的消息。它们是原始 的JSON格式数据:

{"text":"Dust finished the final draft for Hadoop: the Definitive Guide!", "screen_name": "tom_e_white"/,reply_screen_name" inull, "id": 3239897342, 
"reply_tweet_id":null,...}
{"text":"@tom_e_white Can't wait to get a copy!",
••screen_name": "mrf lip",reply_screen_name": "tom_e_white", "id": 3239873453, 
reply_tweet_idM:3239897342,...}
{"text":"@josephkelly great job on the #InfoC^imps API.
Remind me to tell you about the time a baboon broke into our house.", "screen_name":"wattsteve"J,,reply_screen_name":"josephkelly"> "id":16434069252,...}
{"text":@mza Re: http://j.mp/atbroxmr Check out @names_Rubino's
 http://bit.ly/clusterfork ? Lots of good hadoop refs there too",
"screen_name":"mrflip",Veply.screen.name": "id":7809927173,...}
{"text":"@tlipcon divide lots of data into little parts. Magic software gnomes fix up the parts, elves then assemble those into whole things #hadoop", "screen_name": "nealrichter","reply_screen_name": "tlipcon","id":4491069515,. . . }

replyfScreer^name和reply_tweet_id让你能跟踪整个交流过程(否则正如你看到的,这两个值被设置为null)。我们可以找到每个回复,并且输 出相应的用户ID,然后形成一条边:

class ReplyGraphMapper < LineStreamer 
    def process(raw_tweet) tweet = 
        Tweet.new(raw_tweet) 
        if tweet.is_reply?
            emit [tweet.screen_name, tweet.reply_screen_name]
        end 
    end 
end

mapper从LineStreamer类派生出来,该类把每一行作为一个单独记录提 供给process方法。我们只需定义process方法,其余的工作由Wukong和Hadoop完成。这个案例里,我们使用原始JSON格式的记录来创建 tweet对象。遇到用户A回复用户B的地方,就输出一条边,格式为用制表 符分割的AB。原始输出数据如下所示:

% reply_graph_mapper --run raw一tweets.json a_replies_b.tsv
mrflip tom_e_white
wattsteve josephkelly
mrflip mza
nealrichter tlipcon

这条边读作“a回复b”,理解为一条有向“出”边:@wattsteve向 @josephkelly转移了社交中心。

1 .边对(edge)与邻接表(list)

上述网络是采用“边对”(edge pair)方式来表示网络方法。它很简单,并且 对入(in)和出(out)边来说,它们有同样的起始点,但是这样会引入一些重复 数据。从节点的角度来看,把信息都集中到链接源节点可以表达相同的信 息(并节省一些磁盘空间)。我们把这个称作“邻接列表”(adjacency list),它 能用Pig工具通过一个简单的GROUP BY操作产生。加载数据文件:

a_replies_b = LOAD 'a_replies_b.tsv' AS (src:chararray, dest:chararray);

通过在源节点上进行分组,找到从每个节点出来的边:

replies_out = GROUP a_replies_b BY src;
DUMP replies_out
(cutting,{(tom_e_white)})
(josephkelly,{(wattsteve)})
(mikeolson,CLusciousPear), (kevinweil), (LusciousPear), (tlipcon)}) 
(mndoci,{(mrflip),(peteskomoroch),(LusciousPear),(mrflip)}) 
(mrflip,{(LusciousPear),(mndoci),(mndoci),(esammer),(ogrisel),(esammer),(wattsteve)}) 
(peteskomoroch,{(CMastication),(esammer),(DataDunkie),(mndoci),(nealrichter),... 
(tlipcon,{(LusciousPear),(LusciousPear),(nealrichter),(mrflip),(kevinweil)}) 
(tom_e_white,{(mrflip),(lenbust)})

2.度(degree)

对影响力,一种简单而有效的度量就是一个用户收到的回帖数。用图的术语来说,是度(degreeX因为这是一个有向图,所以入度尤其重要)

Pig的嵌套FOREACH语法能使我们在一次数据扫描之后,计算参与进来的 不同的回帖者总数(邻居节点)以及回帖总数:

a_replies_b = LOAD ' a_replies_b.tsv' AS (src:chararray, dest:chararray); 
replies_in = GROUP a_replies_b BY dest; -- group on dest to get in-links
replies_in_degree = FOREACH replies一in {
 nbrs = DISTINCT a_replies_b.src;
GENERATE group, COUNT(nbrs), COUNT(a_replies_b);
};
DUMP replies_in_degnee
(cutting,1L,1L)
(josephkelly,1L,1L)
(mikeolson,3Lj4L)
(mndoci,3L,4L)
(mrflip,5L,9L) 
(peteskomoroch,9L,18L)
(tlipcorij4L, 8L)
(tom_e_white,2L,2L)

在这个示例里,@peteskomoroch有9个邻居节点和18个回帖,远远多于 其他大多数节点的数据。社交网络中度的大小通常存在很大的区别。大多 数用户都只有少数几个回帖,但是少数的名人——如@THE_REAL_SHAQ(篮球

明星Shaquille 0Neill@sockington(—只虚构的猫) 能收到上百万的回帖。相比之下,公路地图上几乎每个交叉点都是简单的十字形。®由于度 的巨大偏差而产生的偏斜数据流对如何处理这样的图数据有很大的影响, 后面会有更多介绍。

转载请注明:全栈大数据 » 16.7.2每个人都在和我说话:Twitter回复关系图

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址