1.DataFrame和RDD最大的区别?
DataFrame和RDD的区别在于:
(1).DataFrame多了结构信息;
(2).DataFrame除了提供比RDD更丰富的算子以外,还可以提升执行效率,减少数据读取以及执行计划的优化,如:filter优化、谓词下推等。
2.宽依赖和窄依赖
宽依赖:父分区的数据被划分到多个子分区(一分区对多分区)。GroupByKey、ReduceByKey、Join。
窄依赖:父分区的数据被划分到一个子分区(一分区对一分区)。map、filter。
3.RDD可持久化
Spark的一个重要功能,就是在不同操作间,持久化(或缓存)一个数据集在内存中。当持久化一个RDD,每一个节点都将把它的计算分块结果保存在内存中。并在对此数据集(或者衍生出的数据集)进行的其它动作中重用。这将使得后续的动作变得更加迅速。
4.RDD序列化
在SparkRDD编程中,初始化工作是在Driver端进行的,而实际运行程序是在Executor端进行的,涉及到了跨进程通信,是需要序列化的。
只有序列化之后的RDD才能使用压缩机制。
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
5.Stage的Task数量由什么决定
并行度:是指指令并行执行的最大条数,在指令流水中,同时执行多条指令称为指令并行。
理论上:每一个stage下有多少分区,就有多少task,task的数量就是我们任务的最大的并行度。
一般情况下,我们一个task运行的时候,使用一个cores。
实际上:最大的并行度,取决于我们的application任务运行时使用的executor拥有的cores的数量。
6.Spark应用中的Driver和Executor会把计算逻辑解析成DAG。
7.Spark的master和worker通过Akka方式进行通信。
8.RDD是什么?
RDD全称是弹性分布式数据集。全称本身并没有很好地解释RDD到底是什么,本质上,RDD是Spark用于对分布式数据进行抽象的数据模型。简言之,RDD是一种抽象的数据模型,这种模型用于囊括、封装所有内存中和磁盘中的分布式数据实体。
RDD五大核心属性:
属性名 成员类型 属性含义
dependencies 变量 生成该RDD所依赖的父RDD
compute 方法 生成该RDD的计算接口
partitions 变量 该RDD的所有数据分片实体
partitioner 方法 划分数据分片的规则
preferredLocations 变量 数据分片的物理位置偏好
9.哪个不是本地模式的运行条件
如果提交的job满足以下条件,那么它将以本地模式运行:
(1).spark.localExecution.enabled设置为true
(2).用户程序显示指定可以本地运行
(3).finalStage没有父Stage
(4).仅有一个partition
10.Spark RDD的缓存方式
RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用。
https://blog.csdn.net/a1837634447/article/details/79113306
11.Spark累加器
Spark三大核心数据结构:
(1).RDD (2).累加器(只写不读) (3).广播变量(只读不写)
https://blog.csdn.net/wx1528159409/article/details/87817785