什么是Spark RDD

这篇文章将为大家详细讲解有关什么是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才产生实际的计算:

    lines.count()统计RDD里返回结果:4

    RDD之间还存在宽窄依赖,也是一个比较重要的概念,窄依赖是指父 RDD 的每个分区都只被子 RDD 的一个分区所使用,如 map、flatMap、 union、filter、distinct、subtract、sample等;宽依赖是指父 RDD 的每个分区都被多个子 RDD 的分区所依赖,如groupByKey、reduceByKey、join等。

关于什么是Spark RDD就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/223202.html

(0)
上一篇 2022年1月6日
下一篇 2022年1月6日

相关推荐

发表回复

登录后才能评论