mapreduce编程(一):输入文件的过滤

    

描述:dir/目录下存储了系统每一天的出现的cookie,各天的cookie分别存放在各自的dir/time目录下,如2012-12-21日的cookie存放在dir/2012-12-21目录下。

    dir/2012-12-21下的各个文件存储的是出现的cookie,一个cookie的多次出现会记录多次(也就是有重复),dir/2012-12-21下的文件名为prefix-tag-suffix的格式。其中tag可视为一个项目的标记,如不同tag即与不同项目相关。

    问题:某一天属于项目A的唯一cookie数是多少?(唯一cookie指去重)

   

    问题在不考虑区分项目的情况下,则只要以cookie为key聚集去重,然后算出去重后的cookie的量即可。

    在区分项目的情况下,项目要根据文件名字来区分,此时就要把文件名不符合条件的过滤掉。

    这时候可以使用PathFilter,使用自定义的PathFilter过滤掉不符合要求的文件.

    

    在mapreduce job中设置:

       

FileInputFormat.setInputPathFilter(job, CookieFilter.class);
     

    CookieFilter的实现:

public class CookieFilter implements PathFilter{

	@Override
	public boolean accept(Path path) {

		if (StringUtils.split(path.getName(), StringUtils.ESCAPE_CHAR, '-')[1].equals("A") {
			return true;
		}
		return false;
	}
}

然后根据cookie去重计数即可。

    

Hadoop环境中利用MapReduce技术进行数据去重、排序及挖掘,是项挑战性任务。为了深入理解并掌握相关技术,推荐参考《MapReduce编程实践:文件合并与去重、排序与信息挖掘》这本书。该书详细讲解了MapReduce的基础知识,并通过具体的实验来巩固理论知识,非常适合想要在Linux系统下进行MapReduce实战的学生。 参考资源链接:[MapReduce编程实践:文件合并与去重、排序与信息挖掘](https://wenku.youkuaiyun.com/doc/68fxn0k87b?spm=1055.2569.3001.10343) 首先,进行文件合并与去重时,可以按照如下步骤进行操作: 1. 定义Map函数,将输入文件内容读取为键值对,键为每行内容,值为null。 2. 在Map函数中,对于每行键值对,将其输出到相应的Reducer。 3. 定义Reduce函数,接收具有相同键的所有值,并将它们合并为个值。 4. 为了去重,Reducer在写入输出之前检查该键是否已经输出过,如果是,则跳过。 接下来,关于数据排序的实现: 1. 在Map函数中,将每个输入键值对的键设置为需要排序的字段。 2. Map函数输出键值对到框架,框架将根据键进行排序。 3. Reduce函数接收到相同键的所有值后,按照键的顺序将值输出。 最后,信息挖掘部分虽然书中没有详细展开,但可以想象: 1. Map函数可以用来生成候选项集,比如频繁项集的候选。 2. Reduce函数负责计算支持度,并过滤出满足最小支持度阈值的频繁项集。 3. 针对关联规则,Reduce函数还需要计算置信度,以找到强规则。 在实际操作时,需要根据具体的业务逻辑编写相应的Map和Reduce函数,并在Hadoop集群上运行,以验证结果。每个步骤都要求在Linux环境下进行,并且运行结果需要通过截图来验证。 通过掌握这些步骤和代码实现,你将能够在Hadoop环境下,使用MapReduce技术有效地进行数据处理。同时,为了进步提高技术能力,建议深入阅读《MapReduce编程实践:文件合并与去重、排序与信息挖掘》这本书,它不仅提供了系列的实验,还涵盖了数据处理的多个方面,帮助你更好地理解并应用MapReduce技术。 参考资源链接:[MapReduce编程实践:文件合并与去重、排序与信息挖掘](https://wenku.youkuaiyun.com/doc/68fxn0k87b?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值