首页 > 其他分享 >spark-rdd

spark-rdd

时间:2024-02-26 22:15:38浏览次数:25  
标签:缓存 RDD 分区 checkpoint rdd 算子 spark

分布式集合对象上的API称之为算子

算子分为两类:

transformation算子:指返回值仍然是rdd,类似于stream里的中间流

    这类算子与中间流相同,是懒加载的

action算子:返回值不是rdd,类似于stream里的终结流

常见算子:

transformation算子

1.map(func):将rdd的数据一条一条的处理,返回新的rdd,和stream流的一样

2.flatmap:对rdd先执行map操作,再进行解除嵌套操作

3.reduceByKey:针对KV型RDD,自动按照key分组,根据提供的聚合逻辑完成聚合操作

4.mapValues:针对KV型RDD,对其中的value进行map操作

5.groupBy:通过这个算子指定你选择谁进行分组 lambda t:t[0]

6.filter:和stream一样

7.distinct:去重,无参

 

#下面这几个都是传入的参数也为rdd

8.union:合并,将2个rdd合并为一个,参数为另一个rdd 注意:1.不同类型可以合并 2.不会去重

9.join:使用方法同上,类似于MySQL的join,所以也有左连接和右连接。注意:只能用于二元的

10.intersection:用法同上,求交集

 

11.glom:将rdd进行嵌套,这个嵌套按照分区进行

12.groupByKey:针对KV型RDD,自动按照K分组(与reduceByKey相比,他少一步聚合的操作)

13.sortBy:排序,函数自己定,三个参数:func,T/F(升/降序),使用多少分区

14.sortByKey:三个参数:T/F,分区,对key进行处理的lambda。注意,这里对key进行的处理不会影响到collect的结果

action算子

15.countByKey:通过key进行计数(KV型RDD)返回的是dict

16.collect:新手村算子 返回的是list

17.reduce:聚合逻辑类似reduceByKey,但是返回的不是rdd

18.fold:类似于reduce,带有初始值 注意:如果是有分区的话,这个方法会在分区内分区外都进行初始值的相加,会产生n+1个初始值

19.first:返回第一个元素

20.take:参数为n,返回前n个元素

21.top:参数n,降序排序取前n

22.count:返回的是有多少条

23.takeSample:随便抽样rdd数据,参数1:T/F T:允许取同一数据 参数2:抽样的个数 参数3:步径,可省略

24.takeOrdered:正常情况下与top相反。参数1:返回几个元素 参数2:(lambda x:-x)控制升序降序,就是强化的top

 

//下面两个效率性能是比较好的,他们会由executor进行输出,绕过了driver

25.foreach:和map一样,但是没有返回值。与其他action算子不同的是,这个算子是由executor输出的,而非driver,因此他的效率更高  # 还是像stream流

26.saveAsTextFile:支持本地/hdfs的写出 # 生成几个文件和你分区使用几个有关。与上一个算子相同,他也不经过driver

 

transformation分区操作算子

27.mapPartitions:一次传输一整个分区,而且接收和传出的都是迭代器对象,比map的性能更好,减少了IO

28.foreachPartitions:同上

29.partitionBy:自定义分区操作 参数1:有几个分区 参数2:分区规则  |  如果不用这个就是用hash分区

30.repartition:重新分区(但是仅数量)!!慎重使用!!:除了全局排序要用一个分区以外,多数的时候分区我们一般不理会。分区增加极大可能导致shuffle

 

面试题:

groupByKey与reduceByKey的区别

1.groupByKey仅仅是分组,reduceByKey在此之上还有个聚合功能

2.reduceByKey的性能是远远大于groupByKey+聚合:groupByKey需要先分组再执行聚合,而reduceByKey会先预聚合再分组再聚合,shuffle的开销很小

 

RDD持久化:

RDD的数据是过程数据:一旦新RDD生成,老RDD就会消失。这样会腾出内存,可最大化的利用资源。所以如果重复使用同一个RDD,那么这个RDD的前置RDD都需要执行

 RDD缓存:

缓存的特点:可以将过程RDD数据持久化保存在内存/硬盘,但是设定上被认为是不安全的

保留RDD之间的血缘关系,因为一旦缓存丢失,可以基于血缘关系的记录重新计算这个RDD的数据

为什么不安全?内存中的缓存会因为断电,计算任务内存不足把缓存清理给计算让路,而硬盘中因为硬盘损坏也是可能丢失的

 

CheckPoint技术

将RDD数据保存起来,仅支持硬盘存储

checkpoint:设计认为是安全的,所以才不保留血缘关系

checkpoint是集中收集各个分区的数据进行集中存储,可以放在HDFS中,而缓存是分散存储

 因此checkpoint不管分区多少数量风险一致,但缓存分区越高风险越高

缓存的性能比checkpoint好一些,因为缓存直接拉内存

sc.setCheckpointDir(" ") # 设置cp的保存路径

rdd.checkpoint() # 直接调用checkpoint算子 这句话就是和rdd.cache()一样

cache与checkpoint对比

cache是轻量化的,可以存储在硬盘或内存,分散存储,设计上认为是不安全的。性能更好,是executor并行执行

checkpoint是重量化的,仅存储在硬盘(HDFS),集中存储,设计上是安全的,所以不设血缘关系。性能差,设计到网络IO

 

标签:缓存,RDD,分区,checkpoint,rdd,算子,spark
From: https://www.cnblogs.com/nanbei666/p/18035692

相关文章

  • 寒假总结3spark简介
    ApacheSpark是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UCBerkeleyAMPlab(加州大学伯克利分校的AMP实验室)所开源的类HadoopMapReduce的通用并行框架,Spark,拥有HadoopMapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不......
  • 寒假学习 11 编程实现将 RDD 转换为 DataFrame
    请将数据复制保存到Linux系统中,命名为employee.txt,实现从RDD转换得到DataFrame,并按“id:1,name:Ella,age:36”的格式打印出DataFrame的所有数据。请写出程序代码。scala>importorg.apache.spark.sql.types._importorg.apache.spark.sql.types._ scala>importorg.......
  • 寒假学习 15 Spark机器学习库MLlib编程实践
    1.针对数据导入,提前导入必要的包,如下所示 2.将数据集转换为DataFrameimport spark.implicits._case class Adult(features: org.apache.spark.ml.linalg.Vector, label: String)val df = sc.textFile("/export/server/spark-3.0.0-bin-hadoop3.2/adult.data.txt")......
  • spark实验七 SparkMLlib
    1.数据导入从文件中导入数据,并转化为DataFrame。2.进行主成分分析(PCA)对6个连续型的数值型变量进行主成分分析。PCA(主成分分析)是通过正交变换把一组相关变量的观测值转化成一组线性无关的变量值,即主成分的一种方法。PCA通过使用主成分把特征向量投影到低维空间,实现对特征......
  • spark实验六SparkStreaming
    1.安装FlumeFlume是Cloudera提供的一个分布式、可靠、可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。Flume的核心是把数据从数据源收集过来,再送到目的地。请到Flume官网下载Flume1.7.0安装文件,下载地址如......
  • Spark实践之Spark Streaming
    首先需要安装flume,我选择的是1.9.0版本,然后对于配置文件只需要配置相关的环境和jdk即可flume-env.sh#LicensedtotheApacheSoftwareFoundation(ASF)underone#ormorecontributorlicenseagreements.SeetheNOTICEfile#distributedwiththisworkforadditi......
  • RDD 任务划分
    v>RDD任务切分中间分为:Application、Job、Stage和TaskApplication:初始化一个SparkContext即生成一个Application; Job:一个Action算子就会生成一个Job; Stage:Stage等于宽依赖(ShuffleDependency)的个数加1; Task:一个Stage阶段中,最后一个RDD的......
  • Spark中RDD阶段划分
    分析源码步骤:第一步程序入口: 第二步一直查看runjob方法,可以看出collect()是RDD行动算子,与Job运行提交相关rdd.scala sparkcontext.scala  sparkcontext.scala  sparkcontext.scala 第三步runJob()与DAG调度有关sparkcontext.scala第四步runJob()核心代码-......
  • spark实验五Spark SQL
    1.SparkSQL基本操作将下列JSON格式数据复制到Linux系统中,并保存命名为employee.json。{"id":1,"name":"Ella","age":36}{"id":2,"name":"Bob","age":29}{"id":3,"name"......
  • spark实验四RDD 编程初级实践
    1.spark-shell交互式编程请到本教程官网的“下载专区”的“数据集”中下载chapter5-data1.txt,该数据集包含了某大学计算机系的成绩,数据格式如下所示:Tom,DataBase,80Tom,Algorithm,50Tom,DataStructure,60Jim,DataBase,90Jim,Algorithm,60Jim,DataStructure,80……请根......