MapReduce编程基础(二)——数值概要(计算中位数、标准差)[内存优化]

本文介绍了如何使用MapReduce优化中位数和标准差的计算,避免将所有数据读入内存。通过保存元素计数而不是列表,减少了内存消耗,并利用Combiner进一步优化。示例中,数据集来自 Movielens,目的是找到用户评分的中位数和均方差。文章总结了这种优化方法的关键点,提醒注意Combiner的输入输出类型匹配。

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

1.中位数与标准差计算示例【内存优化】

在前一篇博客中,我介绍了一种计算中位数和标准差的方法,但是该方法需要将所有的数据读入内存再进行遍历,不够优化。所以在这里,我们将前一种方法进行优化,
将所有的数值都插入列表会产生大量的重复的元素。一个规避重复元素的方法就是保存元素的计数。
例如:要保存<1,1,1,1,2,2,3,4,5,5,5>可以使用排序好的值到计数的映射来代替:(1->4,2->2,3->1,4->1,5->3).
核心概念还是与前一种方法相同,但是这样可以减少存放到内存的数据量。而且这个方法还有一个优点就是可以使用combiner来聚合map端的计数。

2.数据集

本示例使用Movielens数据集中的u1.base文件,MovieLens数据集是一个用户对电影的评分数据集,在后续的示例中我们将一直使用这个数据集,我会将这个数据集上传到优快云方便大家下载,文件的格式如下所示:
第1列到第4列分别代表用户ID**,项目ID**,用户对项目的评分时间戳

1   1   5   874965758
1   2   3   876893171
1   3   4   878542960
1   4   3   876893119
1   5   3   889751712
1   7   4   875071561
1   8   1   875072484
...      ....    ....
943 1067    2   875501756
943 1074    4   888640250
943 1188    3   888640250
943 1228    3   888640275
943 1330    3   888692465

3.问题

对于给定的用户项目评分数据,确定每个用户评分的中位数、均方差。

4.计算方案(内存优化版)

1)自定义Writab类存储输出数据
public class MedianStdDevImproveTuple implements Writable{
   
   
    private float stdD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值