这篇文章将为大家详细讲解有关什么是Spark RDD,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
RDD 字面上就是弹性分布式数据集(Resiliennt distributed Datasets),它是一种抽象的概念,拥有容错、只读、分布式以及基于内存的特性。这里的弹性是什么意思呢?首先,Spark会自动地在内存不足情况下,将数据‘溢出’到磁盘里,使用 persist 和 cache 方法可以将任意RDD缓存到内存或写入磁盘,程序可自动根据数据情况进行切换;其次就是当某个RDD失效,通过Lineage 依赖链重新计算上有RDD即可找回数据;最后就是失败任务的重试机制,仅对失败的RDD进行特定次数的重试(默认好像4次,这个可以通过spark.stage.maxConsecutiveAttempts和spark.task.maxFailures两个参数调节,一个是针对stage级别的容错,一个是task级别)
明白了RDD的基本概念,如何创建一个RDD呢?刚开始学习的时候可以使用HDFS文件创建,简化代码如下:
SparkConf cf = new SparkConf().setAppName("HDFSFileTest");
JavaSparkContext jsc = new JavaSparkContext(cf);
JavaRDD<String> lines = jsc.textFile("hdfs://sparkT:9000/spark.txt");
RDD的操作分为转换和行动两个部分,Transformation只是RDD之间的转换过程,不进行实际计算:
比如lines里面读出来的是{1,2,3},进行map()转换操作:lines.
map(x=>x+l) ,输出结果就是{2,3,4}
只有Action才产生实际的计算:
RDD之间还存在宽窄依赖,也是一个比较重要的概念,窄依赖是指父 RDD 的每个分区都只被子 RDD 的一个分区所使用,如 map、flatMap、 union、filter、distinct、subtract、sample等;宽依赖是指父 RDD 的每个分区都被多个子 RDD 的分区所依赖,如groupByKey、reduceByKey、join等。
关于什么是Spark RDD就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。