Spark Resilient Distributed Dataset

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。

1、getPartitions 一组分区的集合

        ·分区数决定Task个数,决定并行度。默认是线程数。个数太多进行并发

2、Compute 计算函数

3、getDependencies RDD依赖其他RDDS的关系

4、[Partitioner]分区器

5、[getPreferredLocation]首选位置

来源:Spark学习之路 (三)Spark之RDD - 扎心了,老铁 - 博客园 

1、RDD的创建

RDD要进行Collect才会进行方法的调用。rdd.collect().foreach(println)

1、从集合(内存)中创建,底层是parallelize

        sc.makeRDD(本地集合,numSlices分区数)

val seq = Seq[int](1,2,3,4)

val rdd = sc.makeRDD(seq)

2、从外部存储创建RDD

        sc.textile(Path,分区数)

        sc.wholeTextFiles(Path,分区数)   专门用于读取小文件

                ·读取结果为元组:(文件路径,文件数据)

2、RDD的算子类型

Spark支持两种算子:Transformation、Action

Transformation:转化为另一种RDD,具有lazy特性(延迟加载)。Transformation算子的代码不会真正被执行。只有当我们的程序里面遇到一个action算子的时候,代码才会真正的被执行。

Action:触发代码的运行,我们一段spark代码里面至少需要有一个action算子。

 案例

3、算子类型

1映射:map、mapPartitions

        map(func):串行操作,一条一条数据进行逻辑映射

                rdd.map(_.swap),交换<K,V>

        mapParttions:批处理操作,先将整个分区加载到内存,以分区为单位进行映射。可以对逻辑进行修改

2扁平映射:flatMap(func)

        分词效果.flatMap( _.split(" ") )

                    glom:与

3分区:repatriation、coalesce

        reparttion(num、shuffle-bool):可以增加或减少分区,默认开启shuffle

        coalesce:默认只能减少分区,不开启shuffle(可手动开启)

4无key聚合[Action]:sum、reduce、fold、aggregate

5有key聚合[Transformation]:针对<K,V>对的函数

groupByKey + sum / Reduce 、reduceByKey 、foldByKey 、 aggregateByKey

1和2的区别

groupByKey仅分组,需要额外的聚合函数才能聚合。reduceByKey有预聚合,类似MR的combine功能,可以减少reduce次数。

6 Join:join、leftOuterJoin、rightOuterJoin

RDD1.join(RDD2)

7排序:sortBy、sortByKey

sortBy:(_._按第几个排序,降序bool)   //默认升序

sortByKey:按key排

4、RDD持久化(缓存) 与 chekpoint检查点

RDD.cache 纯内存,会在血缘关系中添加新的依赖,一旦出现问题可以重新读取

RDD.persist 可以选择模式内存、磁盘等

         ·默认是MEMORY_ONLY,推荐使用MEMORY_AND_DISK,防止内存占用过高

RDD.unpersist 释放资源,使用完成记得释放

checkpoint 将数据长久保存在磁盘文件中,一般存在HDFS。会切断血缘关系作为顶级依赖。

为了提高效率在checkpoint前进行cache操作,避免重复的运算。

首先先设置sc.setCheckpointDir路径,后可直接RDD.checkpoint标记

5、RDD IO

三种文件格式

rdd.saveAsTextFile("Path")

rdd.saveAsObjectFile("Path")

rdd.saveAsSequenceFile("Path")


共享变量(广播变量、累加器)

累加器:分布式共享只写变量

        可在Task对变量进行添加改变,执行后返回到Driver端聚合。默认提供longAccumalator和doubleAccumalator、collctAccumalator

广播变量:分布式共享只读变量

Executor是一个JVM,广播变量可以加载到JVM内存中,不同task可以进行使用 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值