[MapReduce]找出每个用户最喜欢po贴的时间(以小时为单位)

本文介绍了一个基于Hadoop的MapReduce程序设计案例,旨在分析社区论坛中每位用户的发帖高峰期。通过Mapper处理输入数据,提取作者ID及发帖时间,并由Reducer统计每位用户各小时段的发帖数量,最终输出每位用户发帖最频繁的具体时段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源自Udacity,Intro to hadoop这门课Final Project

题目要求,从论坛帖子的结构化数据中,找出每个用户po贴最多的时间。
比如,用户A在每天的8点,po最多的帖子,数量标记为x
那么reducer的输出就是 A     x

思路:
Mapper需要输出 author_id;
Reducer则对每个用户做一个{hour : count}的统计,最后输出count最多的那个hour 

#mapper
#!/usr/bin/python

import sys
import csv

reader = csv.reader(sys.stdin, delimiter = "\t")
next(reader, None)

for line in reader:
    if len(line) == 19:
        author_id = line[3]
        hour = line[8][11:13]

        print "{0}\t{1}".format(author_id, hour)


# reducer
#!/usr/bin/python

import sys



oldId = None

hours = {}

for i in range(24):
    hours[i] = 0

for line in sys.stdin:

    data = line.strip().split("\t")
    if len(data) == 2:
        thisAuthorId, hour = data

        if oldId and oldId != thisAuthorId:
            print "{0}\t{1}".format(oldId, max(hours, key=hours.get))
            oldId = thisAuthorId
            for i in range(24):
                hours[i] = 0

        oldId = thisAuthorId
        hours[int(hour)] += 1

if oldId != None:
    print "{0}\t{1}".format(oldId, max(hours, key=hours.get))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值