大数据算法

前言
1.MapReduce计算框架流程
Mapper(映射器):
1)对数据进行分片,划分成多个Splits(每个Split按照块大小划分),每个Split都对应一个Mapper
2)Mapper对应的将Split中的数据进行映射成(key,value)

Reducer(归约器)
对Mapper处理后的数据依次进行排序(默认按照字典排序),混洗,分组(Partitioner进行分区,分区数对应Reducer个数)
将分组后的数据(key,(value1,value2,value3))作为Reducer的输入,Reducer执行归约操作

2.MapReduce面向横向扩展,即通过增加节点而增加系统资源(计算和存储资源)

3.MapReduce的优势在于不共享数据处理,即Mapper和Reducer分别独立完成

第一章 二次排序
基本思想:将key和value关联,对value进行排序,即由key-value作为新的key,value为原始对象

MapReduce解决方案:
1)定义组合键的排序,实现compareTo()自定义key排序规则,并构造一个组合键的比较器(必须保留其默认是构造方法super(TwoSortedKey.class,true))//注册
2)自定制键分区规则,保证相同主键相同的数据发送到相同的归约器
3)对到达归约器的数据进行分组(分组排序器),控制哪些键分组到一个Reducer的reduce()函数执行,保证主键相同的数据归约到同一个reduce()处理

Spark解决方案:
1)自定义组合键类,包括主键和值,继承Ordered<>抽象类,定义组合建的排序规则
2)读取文件,利用每行数据构造组合建,以及Tuple
3)调用sortByKey()对数据进行二次排序

第三章Top10列表
Hadoop,Spark通用解决方案(分治法)
1)对数据进行分区和映射成(key,value),可以在Driver端的将top.n变量的值保存在conf中,Mapper和Reducer启动时调用setup()可获取该值
2)对每个分区找出其TopN结果
3)归约产生最终的TopN

Spark采用takeOrdered(N,new Comparator())即需要继承Comparator并定义其每个元素的比较策略

第四章左外连接
Spark解决方案:
1)读取用户数据(userID-locationID)和交易数据(userIdD-productID)
2)交易数据左外连接用户数据(userId,(productId,locationId))
3)只取values
4)按照productId进行分组,然后对locations进行唯一化

第十章基于内容的电影推荐
MapReduce分为三个阶段:
1)根据用户对电影的评分记录,找到对相同电影评分的用户集
2)对于每个电影对(A,B),找到所有同时对A,B评分的用户集
3)找到每两个相关电影之间的关联(Pearson,Cosine,Jaccard)

这样找到了每两个相关电影的关联度,若有人看过一部电影,则可以推荐关联度最高的电影

Spark解决方案:
1)读取源文件信息,创建PairRDD (movie,(user,rating))
2)PairRDD.groupByKey() 统计相同电影的评分记录
输入:(movie,(user,rating))
输出:(movie,[(user1,rating1),(user2,rating2)…])
3)groupRDD.flatMapToPair
输入 (movie,[(user1,rating1),(user2,rating2)…])
输出 (user1,(movie,rating1,numUsers))(user2,(movie,rating2,numUsers))
得到相同电影的评分记录中每个用户对该电影的评分,以及numUsers用户集大小
4)自连接操作usersRDD.join(usersRDD),对相同key(用户)的不同评分电影进行两两匹配,(user1,[(movie1,rating1,numUsers),(movie2,rating2,numUsers)])
5)由于存在joinedRDD存在(movie1,movie2)与(movie2,movie1)因此需要进行过滤, joinedRDD.filter()只保留电影名升序排列的值(唯一匹配)
6)filteredRDD.flatMapToPair()产生((movie1,movie2),(rating1,numUsers1,rating2,numUser2,ratingProd,rating1Square,rating2Square))
7)pairRDD.groupByKey()产生分组((movie1,movie2),[(ratingMsg1,ratingMsg2)..]
8)groupRDD.mapValues()统计相同电影对(movie1,movie2)的皮尔森相似度,余弦相似度,卡尔德相似度

第十一章使用马尔科夫模型的智能邮件营销
1)创建Spark Context,读取源文件
2)mapToPair()创建PairRDD,其每个元素是(customer-id,(data,amount))
3)根据customer-id对PairRDD进行分组.得到相同用户的不同消费记录
4)创建马尔科夫状态序列(定义双字母马尔科夫链状态名)groupRDD.mapValues()将每个(Date,Amount)元素=>状态名比如SG等
5)生成马尔科夫状态转移矩阵,对4)中产生的RDD调用flatMapToPair(),其values表示的状态名列表中的每俩相邻状态对(fromState,toState)设置为((fromState,toState),1)
6)调用reduceByKey统计相同状态名转移的频次((fromState,toState),frequent)

第十二章K-均值聚类
重要参数:
K:簇数
maxIterations:迭代次数
initializationMode:初始化模式:并行化,还是随机化
Runs:最大运行次数
initializiationSteps:步长
epsilon:小于这个阈值可认为Kmeans已收敛

第十三章K-近邻(聚类算法)
KNN算法保证R(查询),S(训练,已分类)两个数据集,对于R中的每一个对象,都希望从S中找出k个最近(欧式距离double)的相邻对象。R中的每个对象根据其相邻对象的多数投票完成分类

KNN的Spark解决方案:
1)R与S进行笛卡尔积
2)计算(r,s)的欧式距离
3)根据r分组,(r,[(s1,distance1),(s2,distance2)..])并根据distance排序,找到k个最近的节点(r,[(s1,distance1),(sk,distancek))])=>(r,[(s1,c1),(sk,ck))])
4)统计r->s中k个近邻点所属分类最多的类别为cmax即为r的类别

第十四章朴素贝叶斯
基于概率的文本分类器

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值