江苏粒度是做大数据库事务的几种粒度服务的?还是做培训的?

在中我们看到Spark为了支持迭代和交互式数据挖掘,而明确提出了内存中可重用的数据集RDD。RDD的只读特性,再加上粗粒度转换操作形成的Lineage,形成了它独立的高效容错机制。
RDD的粗粒度的转换是否有足够的表达能力,来支持多种多样的应用需求呢?先看看RDD究竟有哪些API,然后看它们如何模拟Google经典的MapReduce和图数据处理框架Pregel。
def map[U](f: T =& U): RDD[U]
将RDD[T]经过f转换成RDD[U],T和U一一映射,两个RDD元素个数相等
def flatMap[U](f: T =& TraversableOnce[U]): RDD[U]
将RDD[T]经过f闭包转换成RDD[U],一个T可以映射成0到多个U,两个RDD元素通常不等
def mapPartitions[U: ClassTag](
f: Iterator[T] =& Iterator[U]): RDD[U]
mapPartitions是partition级的转换,多元素到多元素或单元素的转换。
还记得中我们扒开的countByValue函数吗?它就是通过mapPartitions来统计每个partition上所有单词的计数。
def union(other: RDD[T]): RDD[T]
将两个RDD[T]合并成一个RDD[T]。
可能一开始会觉得union操作会耗时较大,实际上这个操作非常廉价。RDD的元信息中包含了Partition/Lineage等信息,union只是合并元信息,而并不涉及具体的数据,so easy。
def distinct(): RDD[T]
将原RDD[T]转换成新的RDD[T],但每个元素只出现一次。
distinct从业务意义上很容易理解,但消耗却不少,需要通过网络交换各个Partition的数据,小伙伴们要注意了。
以下所有的转换都仅针对RDD[(K, V)]有效,是通过把RDD[(K, V)]隐式转换成PairRDDFunctions[K, V]获得的。使用前一定要导入SparkContext内的隐式转化函数,如下:
import org.apache.spark.SparkContext._
不然找不到下面的函数,不要说一码不负责乱说哈。
隐式转换是Scala带来的好东西,类似于C#或Ruby中可以把类打开的功能,实在是写出优雅代码不可多得的工具。不清楚的小伙伴记得一定要GFSOSO哈。
def groupByKey(): RDD[(K, Iterable[V])]
将RDD[(K, V)]中所有(K, V)键值对按K进行分组,每组一个元素,形成新的RDD[(K, Iterable[V])]。
def reduceByKey(func: (V, V) =& V): RDD[(K, V)]
将RDD[(K, V)]中所有(K, V)键值对按K进行分组归并,最终每个K只有一个(K, V)与之对应。
def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))]
将RDD[(K, V)]与RDD[(K, W)做join操作,形成新的RDD[(K, (V, W)),最终形成的RDD中只有两个RDD中共有的K。
def cogroup[W](other: RDD[(K, W)]): RDD[(K, (Iterable[V], Iterable[W]))]
将RDD[(K, V)]与RDD[(K, W)一起分组。
值得注意的是:结果里面包含两个RDD中所有的K,也就是说Iterable[V]和Iterable[W]中可能某个为空。
def mapValues[U](f: V =& U): RDD[(K, U)]
仅对(K, V)中的V进行转换,转换后和原先的K一起形成新的(K, U)键值对,通常和groupByKey一起使用。
def partitionBy(partitioner: Partitioner): RDD[(K, V)]
将RDD[(K, V)]按照K进行重新分区。
重新分区对每个分区数据非常少的情况很有帮助。减少分区,任务数量也会随着分区的减少而减少,降低大量任务调度的开销。
所有转换返回的一定是RDD。
def count(): Long
统计RDD[T]中元素T的个数。
def reduce(f: (T, T) =& T): T
对RDD[T]中的元素进行两两合并,最终合并成一个值。
比如对RDD[Int]中的所有元素求和:ints.reduce((i1, i2) =& i1 + i2)
def collect(): Array[T]
将RDD[T]中所有元素从Slave上收集到Driver上。
该方法应该只应用在元素较少的RDD上,否则Driver一定OutOfMemory。
def saveAsTextFile(path: String): Unit
把RDD[T]中的所有元素保存到磁盘,通常是保存到分布式文件系统。
注意path是个目录,RDD中的每个元素对应了目录下的一个文件。保存后形成:/path/part-00000,
/path/part-00001等文件。最大的好处就是解决了通过collect到Driver再保存到磁盘的问题。
常用的RDD API就上面这些,更多请参考Spark官方文档。
所有动作返回的一定不是RDD。
转换不会加载数据,仅记录Lineage而已,而动作会触发数据的加载,并根据Lineage完成所有的转换,是延迟计算,极大地提升效率。
RDD对MapReduce的模拟
来看这篇文章的小伙伴们应该都清楚MapReduce模型了,它很容易使用RDD进行描述。假设有一个输入数据集(其元素类型为T),和两个函数myMap: T =& List[(Ki, Vi)] 和 myReduce: (Ki; List[Vi]) ) List[R],RDD API模拟代码如下:
data.flatMap(myMap)
.groupByKey()
.map((k, vs) =& myReduce(k, vs))
如果任务包含combiner,则相应的代码为:
data.flatMap(myMap)
.reduceByKey(myCombiner)
.map((k, v) =& myReduce(k, v))
RDD对Pregel图计算的模拟
Pregel是面向图算法的基于BSP范式的编程模型。程序由一系列超步(Superstep)协调迭代运行。在每个超步中,各个顶点执行用户函数,并更新相应的顶点状态,变异图拓扑,然后向下一个超步的顶点集发送消息。这种模型能够描述很多图算法,包括最短路径,双边匹配和PageRank等,我们以PageRank为例来说明。
PageRank可是搜索引擎的基础,经典的大数据算法,还不知道的小伙伴请自行GFSOSO哈。
当前PageRank记为r,顶点表示状态。在每个超步中,各个顶点向其所有邻居发送贡献值r/n,这里n是邻居的数目。下一个超步开始时,每个顶点将其分值(rank)更新为 α/N + (1 - α) * Σci,这里的求和是各个顶点收到的所有贡献值的和,N是顶点的总数。
Pregel的通信模式可以用RDD来描述,主要思想是:将每个超步中的顶点状态和要发送的消息存储为RDD,然后根据顶点ID分组,进行Shuffle通信(即cogroup操作)。然后对每个顶点ID上的状态和消息应用用户函数(即mapValues操作),产生一个新的RDD,即(VertexID, (NewState, OutgoingMessages))。然后执行map操作分离出下一次迭代的顶点状态和消息(即mapValues和flatMap操作)。代码如下:
val vertices = // RDD of (ID, Vertice) pairs
val incomingMessages = // RDD of (ID, Message) pairs
val grouped = vertices.cogroup(incomingMessages)
val newData = grouped.mapValues {
(vert, incomingMsgs) =& spreadRank(vert, incomingMsgs)
// returns (newState, outgoingMsgs)
val newVerts = newData.mapValues((v,ms) =& v)
val newMsgs = newData.flatMap((id,(v,ms)) =& ms)
def spreadRank(...): ... = {
// spread the incoming rank to outgoing rank
需要注意的是,这种实现方法中,RDD grouped,newData和newVerts的分区方法与输入RDD vertices一样。所以,顶点状态一直存在于它们开始执行的机器上,这跟原Pregel一样,这样就减少了通信成本。因为cogroup和mapValues保持了与输入RDD相同的分区方法,所以分区是自动进行的。
如果觉得上面这一段有难度,请在微信公众号上联系一码。
经过四篇文章,Spark基础知识还剩下共享变量,下一篇文章讲过共享变量后,开始讲开发Spark应用经常遇到的问题,以及如何优化性能。
查看《Spark大数据处理》系列文章,请进入YoyaProgrammer公众号,点击 核心技术,点击 Spark大数据处理。
分类 Spark大数据处理
优雅程序员 原创 转载请注明出处
阅读(...) 评论()为什么用python和R之类的语言做大数据机器学习?_词汇网
为什么用python和R之类的语言做大数据机器学习?
责任编辑:词汇网 发表时间: 9:05:46
感觉好多公司都是这样选择,python和R去做机器学习这方面的算法。但是在大数据平台做机器学习,不是应该考虑平台源生语言吗?比如最流行的hadoop,用java直接写mapreduce任务去构建算法不是最好方式吗?不论是性能还是算法控制的细粒度都不是python和R能比的,不是吗?
上一集:没有了 下一集:
相关文章:
最新添加资讯
24小时热门资讯
附近好友搜索全国城市列表
Broderick:传统调研更细颗粒度 弥补大数据不足
大数据研究院
日在()现场,腾讯汽车举行大数据研究院战略发布仪式,正式启动“罗盘计划”。在发布仪式现场,J.D.Power亚太公司副(、、)
兼总经理Geoff Broderick先生参与互动讨论,讲述J.D.Power在大数据研究和分析方面的经验。J.D. Power 亚太公司副总裁兼总经理 Geoff Broderick先生 Geoff Broderick:其实在美国有个回潮,70年代的时候我们已经开始有大型数据。J.D.Power在1973年的时候是一对夫妇开始,研究了3000个问卷查出了一个召回事件的真正原因。3000多个问卷花了几周时间才能完成,那时候感觉特别慢,就对大数据有期待。最近我们在美国已经将大数据应用到了大部分市场调研里面,比如说什么样的广告是最有效率的,还有哪些促销是最有效的,比如说有些会把消费者分为几个人群,如果发现你给他现金打折或反馈的话,或者给有的人很好的金融计划促销效果会非常好的。他们会把这些人群分成不同份,让厂商针对不同人群定制促销计划。在J.D.power的网站上有针对新车质量问题的实时数据,这些实时数据和每年一次的报告相结合,最后整合分析就能够预示哪些会有召回事件,或者会有质量问题。大数据最重要的不是怎么拥有数据,要看数据质量。另外是在分析的时候知道要回答什么问题,而不是没有目的的去挑选这些数据。高质量的大数据研究是要在分析之前就要知道该研究解决什么样的问题。街头拦访在中国还是比较普遍的调研方式。这对于具体车型调研来说是更重要,比如说在能够验证这个人身份的确是车主,才会对这个车型进行具体评价。而在互联网上大家都是一样的问卷,回答几乎一样的问答。J.D.power传统的方式街访显示,其实每个人的答案是不一样的,每个人遇到的问题是不一样的,街访可以针对具体的问题深度剖析其原因是什么,要找出真实的信息。罗盘计划是非常棒的想法。中国汽车市场虽然发展有点减缓了,但是从来没有真正去减速。在过去几年,市场竞争越来越激烈了,以前厂家生产的车型都能卖出去,现在我们大概有500多个车型,竞争特别激烈。这种情况下,就需要有非常明智的选择,正在做的大数据会帮助更复杂的市场竞争做出英明的决策。
正文已结束,您可以按alt+4进行评论
相关搜索:
看过本文的人还看了
微信扫一扫,爱车轻松购
扫描左侧二维码即可下载【购车通APP】;
看车选车找优惠,金牌顾问帮买车。
[责任编辑:lomasma]
热门搜索:
近期热点车型
价格:16.98-32.98万
口碑评分:82分
价格:8.99-16.99万
口碑评分:75分
价格:20.98-27.28万
更多车型:
Copyright & 1998 - 2017 Tencent. All Rights Reserved苹果/安卓/wp
积分 1536, 距离下一级还需 689 积分
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡下一级可获得
权限: 设置回复可见道具: 沉默卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 1 天连续签到: 1 天[LV.1]初来乍到
大数据是什么意思?大数据能做什么?
大数据是什么意思?大数据能做什么?对于目前兴起的大数据时代,大数据成为了一个热词,大家开始有更多的关注在这个上面,同时也带来了这个行业的机会和挑战。那么更多的朋友希望可以更加深层次的了解这个方面的内容,我们可以一起来了解一下。
& & 大数据是什么意思?
大数据在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》中大数据指不用随机分析法(抽样调查)这样的捷径,而采用所有数据进行分析处理。大数据的4V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值)。
& & 大数据(big data),是指无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。
& & 随着大数据的应用越来越广泛,应用的行业也越来越低,我们每天都可以看到大数据的一些新奇的应用,从而帮助人们从中获取到真正有用的价值。很多组织或者个人都会受到大数据的分析影响。
& & “大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
& & 大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。
& & 大数据能做什么?
大数据提供商和行业用户应用都还处在初级阶段,但在当前的泛互联网领域,大数据的应用已十分广泛,尤其以企业为主,企业成为大数据应用的主体。大数据真能改变企业的运作方式吗?答案毋庸置疑是肯定的。随着企业开始利用大数据,我们每天都会看到大数据新的奇妙的应用,帮助人们真正从中获益。大数据的更深层落地应用肯定将会逐渐广泛深入我们工作和生活的方方面面,并涵盖医疗、交通、金融、教育、体育、零售等各行各业。
& & 洛杉矶警察局和加利福尼亚大学合作利用大数据预测犯罪的发生。
& & google流感趋势(Google Flu Trends)利用搜索关键词预测禽流感的散布。
& & 统计学家内特.西尔弗(Nate Silver)利用大数据预测2012美国选举结果。
& & 麻省理工学院利用手机定位数据和交通数据建立城市规划。
& & 梅西百货的实时定价机制。根据需求和库存的情况,该公司基于SAS的系统对多达7300万种货品进行实时调价。
& & 大数据分析的产生旨在于IT管理,企业可以将实时数据流分析和历史相关数据相结合,然后大数据分析并发现它们所需的模型。反过来,帮助预测和预防未来运行中断和性能问题。进一步来讲,他们可以利用大数据了解使用模型以及地理趋势,进而加深大数据对重要用户的洞察力。 他们也可以追踪和记录网络行为,大数据轻松地识别业务影响;随着对服务利用的深刻理解加快利润增长;同时跨多系统收集数据发展IT服务目录。
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产
随着大数据的应用越来越广泛,应用的行业也越来越低,我们每天都可以看到大数据的一些新奇的应用,从而帮助人们从中获取到真正有用的价值。很多组织或者个人都会受到大数据的分析影响
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师}

我要回帖

更多关于 数据库事务粒度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信