![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
scala
liguanghai12
这个作者很懒,什么都没留下…
展开
-
快速排序算法实现
一、什么是快速排序算法思想快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。二、代码实现scala 代码实现def quickSort(list: List[Int]): List[Int] = list match { case head :: tail => val (left, right) = tail.partition(_ < head)原创 2021-02-20 17:30:16 · 138 阅读 · 0 评论 -
Spark shuffle(读写过程)
Spark shuffle过程解析,在Spark执行过程中,StageScheduler 负责阶段stage的划分,然后把每一个stage打包成TaskSetManager传给TaskScheduler,但是一个阶段执行完毕后,再传下一个stage,这里需要涉及到上游stage 写数据,下游数据读数据,这里就是shuffle过程,有上游的ShuffleMapStage写数据历史shuffle演变过程1.每个task写一份文件,下游的task从这份文件中查找数据,这样查找时间长2.每个task根据下原创 2021-02-02 13:25:31 · 365 阅读 · 1 评论 -
Spark Task级调度及黑名单和失败重试
Spark 在执行用户app程序时,执行Driver时会存在TaskScheduler 任务调度器属性,这个属性在伴随Driver的执行就会初始化,在StageScheduler 中 submitTask任务时,把任务提交给TaskScheduler中TaskScheduler:Driver中的task任务调度器在Driver执行过程中,DAGScheduler将划分的阶段Stage提交给TaskScheduler 后,TaskScheduler 将Stage 按照最后一个RDD的分区数量来划分成ta原创 2021-02-01 20:28:11 · 802 阅读 · 0 评论 -
Spark用户application执行之阶段划分
Spark在Yarncluster环境运行,在ApplicationMaster在某一个NodeManager上运行后,并所有的Excetor启动后并向Driver注册成功后,Spark开始运行用户程序,Driver 运行后包括了SparkContext准备,DAGScheduler,TaskScheduler等执行,首先就是先执行DAGScheduler任务阶段划分DAGSchedulerDAGScheduler:Spark任务划分阶段Stage管理器,也就是我们称的有向无环图在Driver初始化S原创 2021-02-01 19:58:15 · 169 阅读 · 0 评论 -
Spark内核源码流程之Yarn cluster提交运行流程
当sparksubmit提交模式为Yarn Cluster模式时的启动流程1.通过submit 在本地机器上启动submit 提交job JVM进程2.submit中会判断是否是cluster环境,是,通过反射执行YarnClusterApplication 的main方法2.YarnClusterApplication 会启动yarn ResourceManager client,连接yarn RM3.连接成功后,会发送指令,在指定的NM上启动ApplicationMaster JVM 进程,A原创 2021-01-29 11:34:52 · 377 阅读 · 0 评论 -
关于Scala中的控制抽象,遇到的问题,op : =>Unit 和op : ()=>Unit的区别
问题描述:今天需要写一段Spark中的需求代码,在抽取特质的时候,需要把一段代码传到def 函数中,于是用到了scala中的控制抽象,在使用传参中用到了op : ()=> Unit,出现了不执行的情况具体代码:trait中部分代码:def start(master:String="local[*]")(name:String="application")(op : ()=>Unit): Unit ={ val sparkConf=new SparkConf().setMaster(m原创 2021-01-27 17:18:27 · 620 阅读 · 0 评论 -
页面转化率统计分析及简单实现
文章目录一、需求分析二、代码实现一、需求分析页面转化率?当前页面–>访问下一个页面的次数 / 访问当前页面的总次数思路如下:1.访问是基于页面访问session来统计,每个session都是一次系统访问2.统计需要统计的每个页面访问的总次数(分母)3.分子统计:3.1.按照每个session分组,访问页面时间排序,获取访问页面的顺序列表3.2.使用sliding 或是zip来连起来,获取前一个页面与后一个页面的访问连接3.3.过滤掉非统计的访问页面3.4.聚合所有页面连接访问原创 2021-01-25 22:54:24 · 1078 阅读 · 0 评论 -
需求二:top 10热度中每个品类点击该品类中总次数的top10 session
文章目录一、top 10热度中每个品类点击该品类中总次数的top10 session二、代码实现一、top 10热度中每个品类点击该品类中总次数的top10 session需求分析:在有品类热度前10的基础上,统计每个品类点击次数前10的session和每个session点击该品类的次数。二、代码实现伪代码:1.获取前10品类2.过滤非点击和非前10品类3.每个品类每个session聚合点击次数4.分品类聚合,每个session和其点击次数5.每个品类取前10代码如下(示例):o原创 2021-01-25 16:24:20 · 135 阅读 · 0 评论 -
Spark练习离线计算,从用户日志中统计各个品类热度top10
Spark练习各个品来热度前10文章目录一、需求和资源准备二、实现方式1.最简单实现2.把第一种方案优化3.把第二种方案优化4.使用共享只写变量实现一、需求和资源准备提供的日志格式:2019-07-17_95_26070e87-1ad7-49a3-8fb3-cc741facaddf_37_2019-07-17 00:00:02_手机_-1_-1_null_null_null_null_32019-07-17_95_26070e87-1ad7-49a3-8fb3-cc741facaddf_48_原创 2021-01-25 12:52:56 · 619 阅读 · 0 评论 -
Spark中广播变量(broadcast)使用
文章目录前言一、使用介绍二、broadcast原理前言 在spark中,有一些数据需要传入到每个Excetor中每个task任务中,假如一个Excetor中有10个分区的task,那么每个分区都得需要一份Driver中传入的数据,那么会导致一个Excetor中有大量的重复的数据,spark中存在一种变量broadcast,广播变量,该变量只会往执行任务的执行的Excetor中发送一份变量,这样会大大减少每个EXcetor中的重复的数据一、使用介绍object Broadcast { d原创 2021-01-23 10:56:31 · 3405 阅读 · 0 评论 -
Spark中累加器(Accumulator)使用
累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Driver 端进行 merge。累加器全称:分布式共享只写变量分布式:由于Excetor是多个,那么累加器也会复制成多份进行计算共享:每个Excetor单独使用自己的accumulator,只写:每个Excetor只能写自己单独的accumulator如果是单独的变量,而不是累原创 2021-01-22 17:25:35 · 1256 阅读 · 0 评论 -
Spark RDD缓存中cache,persist 和checkPoint的区别
Spark RDD缓存中cache,persist 和checkPoint的区别文章目录一、cache,persist和checkPoint是什么?二、不同点1.cache,persist2.checkPoint总结一、cache,persist和checkPoint是什么?cache,persist和checkPoint都是Spark任务执行过程中,缓存RDD产生的数据,避免分区执行发生错误,全部RDD再按照血缘关系再重复执行所有RDD逻辑,而直接从缓存中获取某一段RDD逻辑执行产生的数据二原创 2021-01-22 09:56:41 · 448 阅读 · 0 评论 -
Spark DAG有向无环图任务划分
1.DAG有向无环图DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。例如,DAG记录了RDD的转换过程和任务的阶段。2)RDD任务切分中间分为:Application、Job、Stage和Task(1)Application:初始化一个SparkContext即生成一个Application;(2)Job:一个Action算子就会生成一个Job;(3)Stage:Stage等于宽依赖的个数加1;(4)Task:一个Stage阶段原创 2021-01-21 17:38:18 · 603 阅读 · 1 评论 -
Spark中的血缘关系与依赖
RDD会把之前的依赖关系记录下来,防止在RDD的某一个阶段执行过程中出现问题后,部分分区数据丢失后,无法恢复数据,这是RDD另一个弹性属性,在数据出现问题,重新恢复数据每一个RDD会把它之前的血缘关系记录下来,可以用 rdd.toDebugString 来获取他所有的血缘关系val fileRDD: RDD[String] = sc.makeRDD(List("scala","Spark","Spark","scala","hello")) println(fileRDD.toDebugStri原创 2021-01-21 10:21:41 · 1397 阅读 · 0 评论 -
Spark中RDD算子reduce,aggregate,fold与reduceByKey,aggregateByKey,foldByKey的区别
这几个算子主要分为两类:行动算子:reduce,aggregate,fold转化算子:reduceByKey,aggregateByKey,foldByKey行动算子与转化算子的区别:行动算子会执行Spark作业执行,而转化算子只是计算逻辑的封装/** * Run a function on a given set of partitions in an RDD and pass the results to the given * handler function. This is原创 2021-01-20 17:26:21 · 590 阅读 · 1 评论 -
Spark的RDD中key-value类型RDD处理函数reduceByKey,aggregateByKey,foldBykey和combineByKey理解
reduceByKey:让相同的key进行分区内聚合,让相同key分区间聚合,这里涉及到了分区内预聚合,所以与groupByKey区别在于,groupByKey中shuffle过程数据量不会操作,shuffle落盘文件,相同操作reduceByKey的性能要优于groupByKeydef reduceByKey(func: (V, V) => V): RDD[(K, V)] = self.withScope { reduceByKey(defaultPartitioner(self), f原创 2021-01-20 11:40:43 · 324 阅读 · 0 评论