![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spark
文章平均质量分 71
牧码文
只要思想不滑坡,从此不怕bug多
展开
-
【Spark】Spark的DataFrame使用
Spark的DataFrame是一种类似于表格的数据结构,可以进行各种数据处理操作。使用DataFrame可以很方便地处理结构化数据(如CSV、JSON、Parquet等格式的数据)。原创 2023-03-07 18:48:31 · 1183 阅读 · 0 评论 -
【Spark】Spark的常用算子
使用给定的函数对 RDD 的元素进行聚合,seqOp 计算在分区中初始值到中间结果的聚合计算,而 combOp 在节点上对中间结果进行聚合。: 返回对输入 RDD 和参数 RDD 执行联合操作的结果,生成一个新的 RDD,不去重。: 返回对输入 RDD 和参数 RDD 执行交集操作的结果,生成一个新的 RDD。: 返回对输入 RDD 和参数 RDD 执行差集操作的结果,生成一个新的 RDD。: 返回对输入 RDD 和参数 RDD 执行笛卡尔积的结果,生成一个新的 RDD。原创 2023-03-07 18:03:45 · 2656 阅读 · 1 评论 -
Spark源码之Stage的划分
先看一下Stage的规律可以看到只有一个阶段,Stage-0如果是join操作呢?可以看到有三个阶段:Stage-0、Stage-1、Stage-2如果是分组求和操作呢?可以看到有两个阶段:Stage-0、Stage-1去重操作?可以看到有两个阶段:Stage-0、Stage-1这里可以看出来,其实Spark中Stage的划分,好像和一些join、group by、distinct等这些有关系,那么Spark在划分Stage的时候是以什么为区分呢?其实Spark的底层是根据RDD的血缘依赖原创 2022-06-06 22:04:09 · 844 阅读 · 0 评论 -
Spark源码之组件间通信(Driver <==> Executor)
因为Linux对AIO的支持并不好,所以Linux采用了Epoll的方式模拟了AIO通信Spark 通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各 个实体之间通过消息来进行通信。Endpoint(Client/Master/Worker)有 1 个 InBox 和 N 个 OutBox(N>=1,N 取决于当前 Endpoint 与多少其他的 Endpoint 进行通信,一个与其通讯的其他 Endpoint 对应一个 OutBox),Endpoint 接收到的原创 2022-06-05 14:10:05 · 515 阅读 · 0 评论 -
Spark源码之任务提交流程
执行脚本提交任务,实际是启动一个 SparkSubmit 的 JVM 进程;SparkSubmit 类中的 main 方法反射调用 YarnClusterApplication 的 main 方法;YarnClusterApplication 创建 Yarn 客户端,然后向 Yarn 服务器发送执行指令:bin/java ApplicationMaster;Yarn 框架收到指令后会在指定的 NM 中启动 ApplicationMaster;ApplicationMaster 启动 Driver 线程,执原创 2022-06-04 22:14:07 · 966 阅读 · 0 评论 -
详解Hive on Spark配置
Hive on Spark配置Hive引擎默认的是MapReduce,就是没执行一个Hive语句,其实都是运行了一个MR程序,都知道的,MR虽好,但是慢呢。所以在时代的驱使下,就出现了把Hive的引擎更换的需要,通常Hive的引擎还有tez、Spark。我们经常听到Hive on Spark和Spark on Hive,不明所以的小伙伴还会以为这两个是倒装句,其实不然,Hive on Spark 和 Spark on Hive有着很大的区别Hive on Spark:直译就是把Hive 放到 Spark原创 2021-11-24 14:57:43 · 4197 阅读 · 7 评论 -
Spark的RDD持久化
Spark的RDD持久化对于一个RDD的执行流程,从读取文件到一些处理的过程如图所示从上图也可以看出,Spark的执行过程中是不会保存数据的,虽然会保存各个RDD之间的依赖关系,但是数据的重用还是不能做到,每次重用数据的时候,都需要从头开始执行流程,为了使效率变高,不是重复执行读取,可以在我们需要重复读取的数据后进行数据持久化,以上图为例,因为map数据是需要重复使用的,所以在map之后,增加一个持久化操作mapRDD.cache()一、RDD Cache缓存RDD 通过 Cache 或者原创 2021-09-15 10:21:27 · 210 阅读 · 0 评论 -
Spark的RDD依赖关系
Spark的RDD依赖关系一、RDD的血缘关系RDD 只支持粗粒度转换,即在大量记录上执行的单个操作。将创建 RDD 的一系列 Lineage(血统)记录下来,以便恢复丢失的分区。RDD 的 Lineage 会记录 RDD 的元数据信息和转换行为,当该 RDD 的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。上图中A和B是依赖关系,B和C是依赖关系,那么A和B就是血缘关系,血缘关系可以看做是非直系亲属关系类似于A和C的连续的RDD的依赖关系,称之为血缘关系,每个RDD会保存原创 2021-09-15 09:47:03 · 158 阅读 · 0 评论 -
Spark的RDD行动算子
Spark的RDD行动算子所谓行动算子,其实就是触发了作业(Job)执行的方法,底层代码调用的是环境对象的runJob方法,底层代码中会创建ActiveJob,并提交执行一、reduce函数签名def reduce(f: (T, T) => T): T 函数说明聚集 RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据val rdd: RDD[Int] = sc.makeRDD(List(1,2,3,4)) // 聚合数据 val reduceResult: Int = rd原创 2021-09-04 21:34:59 · 143 阅读 · 0 评论 -
Spark的RDD转换算子-key-value型-aggregateByKey、foldByKey、combineByKey、sortByKey、join、cogroup
Spark的RDD转换算子-key-value型-aggregateByKey、foldByKey、combineByKey、sortByKey、join、cogroup一、aggregateByKey函数签名def aggregateByKey[U: ClassTag](zeroValue: U)(seqOp: (U, V) => U, combOp: (U, U) => U): RDD[(K, U)] 将数据根据不同的规则进行分区内计算和分区间计算val dataRDD1原创 2021-08-30 19:48:24 · 273 阅读 · 0 评论 -
Spark的RDD转换算子-key-value型-partitionBy、reduceByKey、groupByKey
Spark的RDD转换算子-key-value型-partitionBy、reduceByKey、groupByKey一、partitionBy函数签名def partitionBy(partitioner: Partitioner): RDD[(K, V)] 将数据按照指定 Partitioner 重新进行分区。Spark 默认的分区器是 HashPartitionerval rdd: RDD[(Int, String)] = sc.makeRDD(Array((1,"aaa"),(2,"bb原创 2021-08-30 19:24:15 · 533 阅读 · 0 评论 -
Spark的RDD转换算子-双value型
Spark的RDD转换算子-双value型双value型其实就是交集、并集、差集、拉链等操作一、交集:intersection函数签名def intersection(other: RDD[T]): RDD[T] 对源 RDD 和参数 RDD 求交集后返回一个新的 RDDval rdd1 = sparkContext.makeRDD(List(1,2,3,4)) val rdd2 = sparkContext.makeRDD(List(3,4,5,6)) val newRDD = rdd1原创 2021-08-30 19:10:27 · 251 阅读 · 0 评论 -
Spark的RDD转换算子-value型-coalesce、 repartition 、sortBy
Spark的RDD转换算子-value型-coalesce、 repartition 、sortBy一、coalesce函数签名def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] 根据数据量缩减分区,用于大数据集过滤后,提高小数据集的执行效率 当 spark 程序中,存在过多的小任务的时候,可以通过 coalesce 方法,收缩合并分区,减少分区的个数,减小任务调度成本val rdd = sp原创 2021-08-30 18:57:57 · 219 阅读 · 0 评论 -
Spark的RDD转换算子-value型-filter、sample、distinct
Spark的RDD转换算子-value型-filter、sample、distinct一、filter函数签名def filter(f: T => Boolean): RDD[T] 将数据根据指定的规则进行筛选过滤,符合规则的数据保留,不符合规则的数据丢弃。 当数据进行筛选过滤后,分区不变,但是分区内的数据可能不均衡,生产环境下,可能会出现数据倾斜。val rdd = sparkContext.makeRDD(List( 1,2,3,4 ),1) //将偶数过滤得到val原创 2021-08-30 18:46:23 · 296 阅读 · 0 评论 -
Spark的RDD转换算子-flatMap、glom、groupBy
Spark的RDD转换算子-flatMap、glom、groupBy一、flatMap:函数签名def flatMap[U: ClassTag](f: T => TraversableOnce[U]): RDD[U] 就是扁平映射处理,将处理的数据进行扁平化之后再进行映射处理比如对于一个二维列表的操作,使其打散之后在变为一个列表val dataRDD = sparkContext.makeRDD(List( List(1,2),List(3,4) ),1) val data原创 2021-08-28 11:27:25 · 422 阅读 · 0 评论 -
Spark的RDD转换算子-map、mapPartitions、mapPartitionsWithIndex
Spark的RDD转换算子-map、mapPartitions、mapPartitionsWithIndexRDD算子包括RDD转换算子和RDD行动算子,其实算子就相当于一种方法,在方法中封装想要实现所需结果的逻辑,比如在将旧的RDD包装成新的RDD上,所使用的有map、flatMap等,其实这就是转换算子。在整个任务的调度和作业的执行方面,只有调用了collect之后,才会出发任务的执行,比如collect方法,这就是行动算子。RDD转换算子RDD根据数据处理方式的不同将算子整体上分为value型、原创 2021-08-28 11:13:09 · 780 阅读 · 0 评论 -
Spark的三大数据结构-RDD并行度与分区
Spark的三大数据结构-RDD并行度与分区默认情况下,Spark 可以将一个作业切分多个任务后,发送给 Executor 节点并行计算,而能够并行计算的任务数量我们称之为并行度。这个数量可以在构建 RDD 时指定。// TODO 准备环境val sparkConf = new SparkConf().setMaster("local[*]").setAppName("spark") val sparkContext = new SparkContext(sparkConf) // TODO 创原创 2021-08-27 10:06:10 · 698 阅读 · 0 评论 -
Spark的三大数据结构-RDD创建
Spark的三大数据结构-RDD创建RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。一、特点弹性存储的弹性:内存与磁盘的自动切换;容错的弹性:数据丢失可以自动恢复;计算的弹性:计算出错重试机制;分片的弹性:可根据需要重新分片。分布式:数据存储在大数据集群不同节点上数据集:RDD 封装了计算逻辑,并不保存数据数据抽象:RDD原创 2021-08-27 09:17:16 · 685 阅读 · 0 评论