永州网,内容丰富有趣,生活中的好帮手!
永州网 > 知识 > 正文

大数据技术 Spark之RDD 这些就够了 RDD超详细讲解(一)

时间:2000-03-25

以前常用的MapReduce框架是把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销

友情提示:本文共有 2404 个字,阅读大概需要 5 分钟。

一、RDD为什么出现?

在实际开发应用中,存在许多迭代式计算,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。

以前常用的MapReduce框架是把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销。

如果有一种方法,能将结果保存在内存当中,就可以大量减少IO消耗。RDD一种弹性分布数据集,就是为了满足这种需求而出现的,它提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理。

不同RDD之间的转换操作形成依赖关系,可以实现管道化,从而避免了中间结果的落地存储,大大降低了数据复制、磁盘IO和序列化开销。

二、RDD是什么?

一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段(HDFS上的块),并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。

RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,不能直接修改,只能基于稳定的物理存储中的数据集来创建RDD,或者通过在其他RDD上执行确定的转换操作(如map、join和groupBy)而创建得到新的RDD。

RDD提供了一组丰富的操作以支持常见的数据运算,分为“行动”(Action)和“转换”(Transformation)两种类型的算子,前者用于执行计算并指定输出的形式,后者指定RDD之间的相互依赖关系。

两类操作的主要区别是,转换操作(比如map、filter、groupBy、join等)接受RDD并返回RDD,而行动操作(比如count、collect等)接受RDD但是返回非RDD(即输出一个值或结果)。

三、RDD的执行过程

RDD开发执行

1、RDD读入外部数据源(或者内存中的数据集)进行创建;注意:RDD读取数据时,一般默认2个分区。

2、RDD经过一系列的“转换”操作,每一次都会产生不同的RDD,供给下一个“转换”使用;

3、最后一个RDD经“行动”操作进行处理,并输出到外部数据源,或者变成Scala/JAVA集合或变量。

值得注意的是,RDD采用了惰性调用,即在RDD的执行过程中,真正的计算发生在RDD的“行动”操作,对于“行动”之前的所有“转换”操作,Spark只是记录下“转换”操作应用的一些基础数据集以及RDD生成的轨迹,即相互之间的依赖关系,而不会触发真正的计算。

RDD血缘依赖转换流程

RDD血缘关系

从数据输入,到逻辑上生成A和C两个RDD,经过一系列“转换”操作,逻辑上生成了F,也是一个RDD。之所以说是逻辑上,是因为这时候计算并没有发生,只是记录了RDD之间的生成和依赖关系。当F要进行输出时,也就是当F进行“行动”操作的时候,Spark才会根据RDD的依赖关系生成DAG,并从起点开始真正的计算。

这一处理过程:称为一个“血缘关系(Lineage)”,即DAG拓扑排序的结果。

Spark采用惰性调用,通过血缘关系连接起来的一系列RDD操作就可以实现管道化(pipeline),避免了多次转换操作之间数据同步的等待,而且不用担心有过多的中间数据。

因为这些具有血缘关系的操作都管道化了,一个操作得到的结果不需要保存为中间数据,而是直接管道式地流入到下一个操作进行处理。

同时,这种通过血缘关系就是把一系列操作进行管道化连接的设计方式,也使得管道中每次操作的计算变得相对简单,保证了每个操作在处理逻辑上的单一性;相反,在MapReduce的设计中,为了尽可能地减少MapReduce过程,在单个MapReduce中会写入过多复杂的逻辑。

下面我们以具体代码来讲解RDD执行过程:

objectSparkTest{

defmain(args:Array[String]):Unit={

valconf=newSparkConf.setAppName("SparkTest").setMaster("local[*]")

valsparkContext=newSparkContext(conf)

valline:RDD=sparkContext.textFile("filepath")

valfilt=line.filter(_.contains("spark"))

valdata=filt.cache().count()

println(count)

}

}

从上可以看出,一个Spark应用程序,基本是基于RDD的一系列计算操作。

第1行代码用于创建SparkContext对象,执行上下文环境;

第2行代码从文件中读取数据创建一个RDD;

第3行代码对读取的数据,返回的RDD进行转换操作得到一个新的RDD,即filterRDD;

filt.cache()表示对lines进行持久化,把它保存在内存或磁盘中。这里采用cache接口把数据集保存在内存中,方便后续重复使用。

注意:当数据被反复访问时,比如查询一些热点数据、或者运行迭代算法时,把数据缓存到内存中这是非常有用的。而且通过cache()可以缓存非常大的数据集,支持跨越几十甚至上百个节点;filt.count()是一个行动操作,用于计算一个RDD集合中包含的元素个数。

这个程序的执行过程如下:

创建这个Spark程序的执行上下文,即创建SparkContext对象;

从外部数据源中读取数据创建fileRDD对象;

构建起fileRDD和filterRDD之间的依赖关系,形成DAG图,这时候并没有发生真正的计算,只是记录转换的轨迹,也就是血缘依赖关系;

执行action代码时,count()是一个行动类型的RDD,触发真正的计算。开始执行从fileRDD到filterRDD的转换操作,并把结果持久化到内存中,最后计算出filterRDD中包含的元素个数。

收集不易,本文《大数据技术 Spark之RDD 这些就够了 RDD超详细讲解(一)》知识如果对你有帮助,请点赞收藏并留下你的评论。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(4)
  1. 酸咪子2024-02-04 19:12酸咪子[湖北省网友]111.91.201.215
    看到这些寄语,让我对爱情的态度有了新的思考,希望能够在感情中更加坚定和成熟。
    顶0踩0
  2. 若智0072024-02-04 18:54若智007[内蒙古网友]43.224.24.123
    这些经典寄语适用于男生女生,感情中都能够找到共鸣。
    顶0踩0
  3. Happy me2024-02-04 18:36Happy me[天津市网友]203.134.243.232
    真的很喜欢这些爱情箴言,简单而深刻,希望自己能够牢记。
    顶0踩0
  4. 格格blue2024-02-04 18:18格格blue[江苏省网友]202.59.233.235
    这些经典寄语真的很有道理,女生们都应该常常读读,学会珍惜自己。
    顶5踩0
相关阅读
裸K交易系统:外汇课堂的干货分享

裸K交易系统:外汇课堂的干货分享

...析市场主流资金动向。3.交易者构成:1:基本面交易者2:技术面交易者(技术面交易者又分为趋势交易者,指标交易者,K线形态交易者等)4.资金构成(持仓周期):长线资金,中线资金,短线资金。如何追随主流资金流向,那...

2024-02-06 #头条

可信网站验证能防范的安全威胁:揭秘可信安全认证及其防骗功效

可信网站验证能防范的安全威胁:揭秘可信安全认证及其防骗功效

...钱袋子才是根本!区块链+大数据#区块链# #大数据#大数据技术在解决当下许多问题方面具有巨大的潜力,目前政府、国私企正大力投资建设部门的大数据中心,以此来提高对外的服务质量。区块链技术具备的很多独特性质,可以...

2024-01-26 #随笔

疫情催生智慧化旅游:无接触服务与智能导览成景区新趋势

疫情催生智慧化旅游:无接触服务与智能导览成景区新趋势

...包括无接触入园系统、智能预约服务、智能导览等。这些技术的应用不仅提升了景区内部的运营效率,也改善了游客的体验和安全感。智能导览系统通过数字化、互动化的方式为游客提供更丰富的文化解说和旅游体验,让游客能...

2024-02-05 #生活

新媒体技术应用下的大数据思维拓展:机遇与挑战

新媒体技术应用下的大数据思维拓展:机遇与挑战

...放与国际交流带来了中国经济高速发展,同时带来了信息技术领域的更新。如何利用好新媒体技术所带来的新思维开展大学生思想政治教育是一项重要任务。大学生思想政治教育;新途径:大数据:互联网思维一、新媒体带来的...

2024-01-22 #生活

以色列医疗创新:小创意 大健康的专访报道

以色列医疗创新:小创意 大健康的专访报道

...创新包括微型医疗设备、智能健康监测系统以及基因编辑技术的应用。他强调,这些“小”创意并非仅仅停留在实验室里,而是已经走向临床应用和商业化阶段。他指出,这些创新的背后是对健康问题的深刻理解和不断探索的精...

2024-02-04 #知识

深入了解Python中series函数及其顺序参数的使用指南

深入了解Python中series函数及其顺序参数的使用指南

...指在编程中使用series函数并结合顺序参数进行操作的一种技术。通过使用series函数,程序员可以按照需要对数据进行处理和分析,而顺序参数则可以帮助程序更精准地获取所需的数据。这种技术在数据分析和处理领域特别有用,...

2024-01-29 #知识

易溯科技荣获智慧食药优秀解决方案奖项:一物一码助力大健康产业创新监管

易溯科技荣获智慧食药优秀解决方案奖项:一物一码助力大健康产业创新监管

...溯科技是国内领先的供应链追溯服务商,其“一物一码”技术为食品和药品行业提供了全程可追溯的解决方案。该技术结合了物联网、大数据和区块链等先进技术,可以实现产品的溯源追踪、信息公示和风险预警,有效提高了监...

2024-02-04 #头条

探讨阿里巴巴与亚马逊在跨境电商领域的竞争力:亚马逊是否真的是最大的跨境电商平台?

探讨阿里巴巴与亚马逊在跨境电商领域的竞争力:亚马逊是否真的是最大的跨境电商平台?

...上,我看到了阿里云的“野心”。一方面,做大自己的云技术优势。神龙架构升级到第四代,把网络延迟整体降低80%以上,将云计算首次带进5微秒时延时代。这意味着,我们的云计算从普快变成了高铁!招牌产品云数据库PolarDB...

2024-02-13 #头条