共计 2584 个字符,预计需要花费 7 分钟才能阅读完成。
这篇文章主要介绍“spark 创建 RDD 的方式有哪些”,在日常操作中,相信很多人在 spark 创建 RDD 的方式有哪些问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”spark 创建 RDD 的方式有哪些”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
## 产生的技术环境
避免在多种运算场景,多种集群部署
集群计算数据,典型的思想 mr, 后来最重要的是 hadoop, 分布式集群,会把编程简化为位置感知、容错、负载均衡,在集群上操作超大数据,这种模式是数据流的方式;hdfs- 计算 - hdfs tez dag 基于数据流的 dag 虽然实现任务调度和故障恢复,但是每次操作读写磁盘,如果同样一次操作,如果第二次操作,完全会计算一次,比如图计算,机器学习,比如交互式查询
## 解决问题的方式
解决上述的问题是 RDD
检查点或者回滚机制 vs 共享内存模型
# 创建 RDD 的三种方式
通过已存在的 scala 集合
通过 hdfs、hbase 等
通过其他 rdd 的转换
#Spark RDD 中 Transformation 的 Lazy 特性
textfile 产生 hadoopRDD 和 mappartitionRDD
#Spark RDD 中 Runtime 流程解析
RDD 是逻辑结构,数据本身是 block manager
#Spark RDD 中 Transformation 的算子详解
map: 针对每个分区中的元素进行改变, 分区个数不行 v1- v`1,map 是根据 stage 中进行复合操作时执行的
flatmap: 将各个分区中的数,进行转化,汇聚成一个分区
mapPartitions:Iter= iter.filter(_ 3) 针对某个分区, 分区数不变
glom: 将每个分区形成一个数组,分区数不变
filter: 根据传入的函数的返回值,如果为 true,就返回否则忽略,分区数不变
distinct: 针对每个分区内重复的元素过滤,分区数不变
cartesian: 针对多个 RDD 的分区进行笛卡尔积
union: 针对多个 RDD 分区进行合并(不进行去重),会改变分区数
mapValues: 针对分区中 kv 结构的 RDD 中的 v 进行操作,对 k 不会有影响,分区数不变
subtract: 去除多个分区中交叉的元素
sample: 针对 RDD 采样 fraction=0.5,seed=9, 返回结果仍是 RDD
takeSample:num=1,seed=9, 返回结果不是 RDD groupBy: 根据 k,group, 相同 k 拥有 v 数组 partitionBy: 针对 RDD 分区 cogroup: 这对 kvRDD,的 k 进行分组,每个 k 是 v 的元组数组 combineByKey:groupbykey,针对分区进行分组,分区数不变 reduceByKey: 对每个分区相同 k 的 v 进行操作
join:
leftOuterJoin:
rightOuterJoin:
#Spark RDD 中 cache 和 persist 详解
cache 是 persist 的一种实现,都是 lazy 操作,unpersist 是立即操作
#RDD 中 Action 的算子详解
foreach:
collect:toArray
collectAsMap:kv 模式的 hashmap,k 重复 v 会覆盖
reduceByKeyLocally:reduce+collectAsMap:kv lookup: 寻找指定 k 的 sequence 序列, 优先找 partition,否则暴力扫描
count: 计算所有分区中元素的个数
top:
reduce: 对每个分区分别进行 reduceLeft, 在对所有分区结果进行 reduceLeft
fold: 比 reduce 默认一个 zero
aggregate:
saveAsTextFile:
saveAsObjectFile:c null,byteWriteable sequence
#RDD 中的缓存和检查点不同使用场景和工作机制彻底解析
## 缓存 (persist)
缓存会被重用 eg:1 2 3 4 [5] 6.1 6.2 6.3
[5] 有 10000 分片,可能丢失
## 检查点(checkpoint) 在什么地方缓存,在获取大量数据的时候,上下 stage, 很长的计算链条之后,超耗时计算,checkpoint
checkpoint: 会改变 rdd 的血缘关系,在 action 后触发,引入 checkpoint, 避免缓存丢失,重新计算带来的性能方面的开销,checkpoint,在 action 触发之后产生一个新的 job, 使用 checkpoint 的 rdd 务必使用 checkpoint,这样更快,流计算,图计算使用很多 checkpoint
#RDD 窄依赖 NarrowDependency 和宽依赖 ShuffleDependency
1 个窄依赖:1 个计算任务,相互独立
源码 Dependency
窄依赖可以优化 scheduler optimizations
宽依赖是划分 stage 的依据,stage 是构成 dag 的大粒度
# 两种类型 Spark RDD Task 解析以及 iterator 解析
最后一个 stage 的 task 是 resultTask,前面依赖的 stage 的 task 称为 shuffleMapTask, 都共有一个 runTask 方法的 iterator 开始计算
shuffleMapTask- bucket
判断是否有缓存
判断是否有 checkpoint
sparkEnv
#RDD 的 iterator 中的缓存处理内幕源码级详解
#Spark RDD 的 checkpoint 处理内幕源码级详解
#Spark RDD 容错原理及其四大核心要点解析
#Spark 应用程序中核心概念和常用术语详解
一个 application 可以有若干个作业
#Spark 应用程序作业调度流程和底层运行机制内幕概述
#Spark 应用程序运行 Cluster 和 Client 两种模式详解
cluster 是在集群的某个 worker 中,client 是在本地
所有的 schedule 都会被 driver 中的 schedulebackend 管理
excutor 内部是多线程并行执行
#DAGScheduler、TaskScheduler、SchedulerBackend 解析
到此,关于“spark 创建 RDD 的方式有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!