数据算法 --hadoop/spark数据处理技巧 --(1.二次排序问题 2. TopN问题)
一、二次排序问题。
MR/hadoop两种方案:
1.让reducer读取和缓存给个定键的所有值(例如,缓存到一个数组数据结构中,)然后对这些值完成一个reducer中排序。这种方法不具有可伸缩性,因为reducer要接受一个给定键的所有值,这种方法可能导致reducer的内存耗尽(OOM)。另一方面,如果值数量很少,就不会导致内存溢出,那么这种方法可行。
2.使用MR框架对reducer的值排序(这样一来,就不再需要对传入reducer的值完成排序。)这种方法“会为自然键增加部分或整个值来创建一个组合键以实现排序目标”(参考 java Code Geeks)。这种方法可伸缩,不会产生内存溢出错误。在这里,排序工作基本上由MR框架来完成。
使用MR框架的二次排序设计模式,规约器值到达时就是有序地。(也就是说,不再需要在内存中对值进行排序)。这种技术使用了MR框架的洗牌和排序技术完成规约器值的排序。这种解决方案比1更可取,不再依赖内存完成排序。
思考分析:对返回数据形式进行分析,自定义对象和reducer的分区策略。(当然为了实现排序,要对自定义的对象进行实现comparele接口,重写compare方法。)
spark两种方案:
1.将一个给定键的所有值读取缓存到一个List数组结构中,然后对这些值完成排序。优缺点同MR方案1.
2.使用Spark框架对规约器值排序(这种做法不需要对传入规约器的值完成规约器中排序)。这种方法“会为自然建增加部分或整个值来创建一个组合键以实现排序目标。”
二。 Top N问题。
列表L的TopN 算法大致描述:L列表的元素是一个scala的tuple结构,通过java的TreeMap将一个tuple添加到其中,然后对TreeMap进>N的if操作,来进行remove操作。
1.唯一键。
例子:
在这个问题上,可以使用一个规约器完成对所有数据的接收,所有压力和负载全部是都在这一个节点上。在这里不糊带来性能问题,为什么呢。假设有由1000个映射,每个映射器只会生成10个键值对,因为,这个规约器只会得到10*1000个记录,这个数据量还不至于导致性能瓶颈。
2.非唯一键
例子:
topN设计模式:这里假设所有K不是唯一的,主要步骤:
①。确保所有K是唯一的。要保证K是唯一的(存在不唯一的,直接把相同的K的V相加。),我们要把输入映射到JavaPairRDD<K,V>对,然后交给reduceByKey().
②。将所有唯一的(K,V)对划分为M个分区。
③。找出个个分区的Top N。
④。找出所有本地topN的最终top N.
数据算法 --hadoop/spark数据处理技巧 --(1.二次排序问题 2. TopN问题)的更多相关文章
- 数据算法 --hadoop/spark数据处理技巧 --(5.移动平均 6. 数据挖掘之购物篮分析MBA)
五.移动平均 多个连续周期的时间序列数据平均值(按相同时间间隔得到的观察值,如每小时一次或每天一次)称为移动平均.之所以称之为移动,是因为随着新的时间序列数据的到来,要不断重新计算这个平均值,由于会删 ...
- 数据算法 --hadoop/spark数据处理技巧 --(9.基于内容的电影推荐 10. 使用马尔科夫模型的智能邮件营销)
九.基于内容的电影推荐 在基于内容的推荐系统中,我们得到的关于内容的信息越多,算法就会越复杂(设计的变量更多),不过推荐也会更准确,更合理. 本次基于评分,提供一个3阶段的MR解决方案来实现电影推荐. ...
- 数据算法 --hadoop/spark数据处理技巧 --(11.K-均值聚类 12. k-近邻)
十一.k-均值聚类 这个需要MR迭代多次. 开始时,会选择K个点作为簇中心,这些点成为簇质心.可以选择很多方法啦初始化质心,其中一种方法是从n个点的样本中随机选择K个点.一旦选择了K个初始的簇质心,下 ...
- 数据算法 --hadoop/spark数据处理技巧 --(3.左外连接 4.反转排序)
三. 左外连接 考虑一家公司,比如亚马逊,它拥有超过2亿的用户,每天要完成数亿次交易.假设我们有两类数据,用户和交易: users(user_id,location_id) transactions( ...
- 数据算法 --hadoop/spark数据处理技巧 --(17.小文件问题 18.MapReuce的大容量缓存)
十七.小文件问题 十八.MR的大容量缓存 在MR中使用和读取大容量缓存,(也就是说,可能包括数十亿键值对,而无法放在一个商用服务器的内存中).本次提出的算法通用,可以在任何MR范式中使用.(eg:MR ...
- 数据算法 --hadoop/spark数据处理技巧 --(13.朴素贝叶斯 14.情感分析)
十三.朴素贝叶斯 朴素贝叶斯是一个线性分类器.处理数值数据时,最好使用聚类技术(eg:K均值)和k-近邻方法,不过对于名字.符号.电子邮件和文本的分类,则最好使用概率方法,朴素贝叶斯就可以.在某些情况 ...
- 数据算法 --hadoop/spark数据处理技巧 --(15.查找、统计和列出大图中的所有三角形 16.k-mer计数)
十五.查找.统计和列出大图中的所有三角形 第一步骤的mr: 第二部mr: 找出三角形 第三部:去重 spark: 十六: k-mer计数 spark:
- 数据算法 --hadoop/spark数据处理技巧 --(7.共同好友 8. 使用MR实现推荐引擎)
七,共同好友. 在所有用户对中找出“共同好友”. eg: a b,c,d,g b a,c,d,e map()-> <a,b>,<b,c,d,g> ;< ...
- 哈,我自己翻译的小书,马上就完成了,是讲用python处理大数据框架hadoop,spark的
花了一些时间, 但感觉很值得. Big Data, MapReduce, Hadoop, and Spark with Python Master Big Data Analytics and Dat ...
随机推荐
- Vue CLI及其vue.config.js(一)
有时候我们为了快速搭建一个vue的完整系统,经常会用到vue-cli,vue-cli用起来很方便而且命令简单容易上手,但缺点是在构建的时候我感觉有一些慢,因为CLI 服务 (@vue/cli-serv ...
- Vue中echarts的基本用法
前言:同大多数的前端框架一样,先读官网的使用方法.学会基本使用后,在实例中找到自己想要demo.拿过来改一改,一个echarts图表就形成,毕竟人家做就是为了方便使用. 我是在vue中下面直接使用的e ...
- 12.Android-SQLiteOpenHelper使用
1.SQLite介绍 SQLite,是一款轻型的数据库,它的优缺点有如下: 轻量级,适合嵌入式设备,并且本身不依赖第三方的软件,使用它也不需要“安装”. 并发(包括多进程和多线程)读写方面的性能不太理 ...
- Spring-cloud微服务实战【二】:eureka注册中心(上)
## 前言 本系列教程旨在为大家演示如何一步一步构建一整套微服务系统,至于其中的数据库用什么,订单ID如何保持唯一,分布式相关问题等等不在我们讨论范围内,本教程为了方便大家后续下载代码运行测试,不 ...
- 关于爬虫的日常复习(17)——scrapy系列1
- Docker + node(koa) + nginx + mysql 线上环境部署
在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置 ...
- MacOSX 安装 TensorFlow
TensorFlow是一个端到端开源机器学习平台.它拥有一个包含各种工具.库和社区资源的全面灵活生态系统,可以让研究人员推动机器学习领域的先进技术的. 准备 安装 Anaconda TensorFlo ...
- 16、python面对对象之类和继承
前言:本文主要介绍python面对对象中的类和继承,包括类方法.静态方法.只读属性.继承等. 一.类方法 1.类方法定义 使用装饰器@classmethod装饰,且第一个参数必须是当前类对象,该参数名 ...
- Windows和Linux换行的区别
Linux下的换行符是: "\n" Windows的换行符 : "\r\n" r = return n = newline TODO 原因: 根据平台自己转化的 ...
- 文件上传二:FormData上传
介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,现在不推荐用了. 真正的异步上传,FormData的更多操作,请 ...