- 博客(509)
- 收藏
- 关注
原创 Spark的持久化&Checkpoint
一、RDD的持久化原理(cache&persist): 首先明确一点,RDD中是不存储数据的,如果一个RDD需要重复使用,那么需要从头执行来获取数...
2023-05-05 16:18:00
197
原创 98. 验证二叉搜索树【68】
给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。有效二叉搜索树定义如下:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。
2023-05-05 10:44:49
284
原创 Spark算子及其分类总结
transform:窄依赖:mapmap_1mapPartitionsmapPartitions_TestmapPartitionsWithIndexmapPartitionsWithIndex_1flatMapflatMap_1flatMap_2glomglom_TestgroupBygroupBy_1filtersample宽依赖:distinctcoalescerepartitionsortBysortBy_1
2023-05-04 22:26:03
776
原创 Spark shuffle、RDD算子【重要】
一、介绍一下Spark shuffle: Spark shuffle就是将分布在不同结点的数据按照一定的规则进行打乱重组。那么,说起shuffle就想到M...
2023-05-04 21:44:00
425
原创 543. 二叉树的直径【71】
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
2023-05-03 10:38:55
756
原创 199. 二叉树的右视图【111】
既然是站在右边看树,那么我们看到的结点都是每一层的最右边的结点,这个节点可能在根的右子树上,也可能在根的左子树上。所以,我们可以递归遍历树,使用深度优先算法,按照【根节点 ->右子树 -> 左子树】的顺序访问。同时设置一个depth变量,如果depth的值与res集合中的元素数量相等的话,就说明当前被遍历到的这个节点没有放在res中,所以将这个节点的值放到res中,同时每遍历一层就加一,这样就能知道树的深度,也可以保证每一层只有一个节点可以放入res中,这样就可以保证每层都是最先访问最右边的结点
2023-05-02 14:45:19
753
原创 递归思路讲解
最近刷到了树这一模块的算法题,树相关的算法题几乎都是用递归来实现的,但递归的思路却有点抽象,每次遇到递归,都是通过递归来深度或广度地遍历树,但对于递归遍历树的遍历路线,却有点抽象难懂,不知道遍历的路线是怎么样的,也对于返回的路线有点懵懂。虽然知道是用递归,也知道递归可以一层一层从上到下地遍历,大体上的一个遍历路线是明白的,但是真要将递归一层层拆解分析的话,我还是有点不知所措的,所以今天研究了一小时,彻底将递归的一层层遍历拆解分析透彻了。记录一下拆解分析的过程,以防之后又忘了,方便回顾。
2023-05-02 14:26:27
931
原创 RDD中 groupByKey 和 reduceByKey 哪个性能好,为什么?
在讲他们的性能之前,先分析一下groupByKey和reduceByKey的操作流程: groupByKey: ...
2023-04-26 15:45:00
275
原创 236. 二叉树的最近公共祖先【190】
自顶向下遍历,用递归的方法,这里找到公共祖先分为两种情况:1.p 和 q 在公共结点的两侧,则当前结点就是公共结点2.公共结点为p 或 q 中的任何一个,另一个则为公共结点的子节点,那么p 或 q 则是公共结点。代码思路:(1)先判断root是否为null,或者root 为p 或 q中的任意一个,那么直接返回root,这里的root放在递归的时候就是当前结点。(root为null有两种情况,一种是树为null,第二种是叶子结点为null,也就是遍历完了,也没找到目标值)(2)既然p
2023-04-26 13:28:35
466
原创 Spark RDD 机制理解吗?RDD的五大属性,RDD、DataFrame、DataSet三者的关系,RDD和DataFrame的区别,Spark有哪些分区器【重要】...
一、Spark RDD机制:【重要】 RDD(Resilient Distributed DataSet)叫做弹性分布式数据集,是Spark中最基本的数据...
2023-04-26 10:17:00
266
原创 什么是Spark?Spark的核心模块、Spark的核心组件
一、什么是Spark? Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 ...
2023-04-25 21:43:00
684
原创 103. 二叉树的锯齿形层序遍历【191】
本题的解决思路和102. 二叉树的层序遍历【206】类似,可以说思路基本一样,只是在一个细节的地方不一样。遍历完一层后,添加元素到链表中,可以选择添加到链表尾部还是头部,偶数层的话(即0、2、4)就添加到尾部,这样就是从左到右遍历;奇数层的话(即1、3、5)就添加到头部,这样就相当于从右往左遍历。实现锯齿形层序遍历的方法,本质上其实就是在添加元素的时候选择插入到链表尾部还是头部。具体思路:1.按层数的奇偶来决定每一层的输出顺序。规定二叉树的根节点为第0层,如果当前层数是偶数,从左至右输出
2023-04-23 14:42:36
671
原创 104. 二叉树的最大深度【75】
深度优先:一棵树的深度 = max(左子树的深度,右子树的深度)+1也就是左子树和右子树的深度取最大的,再加1,就等于当前结点的深度。那么,根据这个思想,我们可以用递归的方式,分别递归左子树和右子树,依次递归下去,就得到了树的深度。代码思路:(1)先判断树是否为null,为null返回0(2)树不为null的话,分别递归左子树、右子树,最终return max(左子树的深度,右子树的深度)+1
2023-04-23 13:24:23
484
原创 101. 对称二叉树【74】
递归解法:思路:如果一个树的左子树和右子树都是对称的,那么这个树就是对称的。所以用递归的方式,深度进行层层遍历比较,一棵子树一棵子树的遍历;两个数对称需要满足以下两种情况:(1)它们的两个根节点具有相同的值(2)每个树的右子树都与另一个树的左子树对称代码思路:实现一个递归函数,通过传入两个指针的方法来遍历这棵树,p指针和q指针一开始都指向这棵树的根,随后p右移时,q左移,p左移时,q右移。每次检查当前p和q结点的值是否相等,如果相等在判断左右子树是否对称。
2023-04-22 11:23:41
166
原创 110. 平衡二叉树【75】
自底至顶:思路是对二叉树做先序遍历,从底至顶返回子树的最大高度,若判定某子树不是平衡树则“剪枝”,直接向上返回。(判断子树是否满足平衡,子树不满足则直接返回,若子树满足,则继续向上比较,用递归的方式依次类推,直到判断根节点的左右子树是否满足平衡。)算法流程:递归返回值:(1)当结点 root 的左/右子树的高度差
2023-04-22 10:08:11
331
原创 145. 二叉树的后序遍历【34】
后序遍历:左节点-->右节点-->根节点后序遍历方法的代码实现:1.先判断树是否为null2.后序遍历就先对左子树、右子树依次分别递归调用,再将根节点添加到list中
2023-04-21 11:08:47
564
原创 94. 二叉树的中序遍历【119】
中序遍历:左节点-->根节点-->右节点中序遍历方法的代码实现:1.先判断树是否为null2.中序遍历就是先递归左子树,再将根节点添加到list中,最后再递归右子树
2023-04-21 11:05:31
191
原创 144. 二叉树的前序遍历【78】
前序遍历:根节点-->左节点-->右节点前序遍历方法的代码实现:1.先判断树是否为null2.前序遍历就先将根节点添加到list中,再对左子树、右子树依次分别递归调用
2023-04-21 11:05:28
193
原创 102. 二叉树的层序遍历【206】
1.先判断这个树是否为空,为空则直接返回。2.树不为空,我们将根节点放入一个队列中,然后每次取出这个节点后,相应的将他的左右子节点依次放入队列中,按照队列的先进先出的特性,依次将元素出队列。(难理解可以画图感受一下)
2023-04-21 09:56:48
594
原创 Scala的隐式转换详解
隐式转换是在Scala编译器进行类型匹配时,如果找不到合适的类型,那么隐式转换会让编译器在作用范围内自动推导出来合适的类型。一、隐式值与隐式参数隐式值是指在定义参数时前面加上implicit。隐式参数是指在定义方法时,方法中的部分参数是由implicit修饰【必须使用柯里化的方式,将隐式参数写在后面的括号中】。隐式转换作用就是:当调用方法时,不必手动传入方法中的隐式参数,Scala会自动在作用域范围内寻找隐式值自动传入。
2023-04-20 20:43:43
770
原创 Scala 中的 Match Case 模式匹配、偏函数与样式类
偏函数定义时,不能使用括号传参,默认定义 PartialFunction 中传入一个值,匹配上了对应的case,返回一个值。使用了case关键字的类定义就是样例类(case classes),样例类是种特殊的类。实现了类构造参数的getter方法(构造参数默认被声明为val),当构造参数是声明为var类型的,它将帮你实现setter和getter方法。(1)样例类默认帮你实现了toString,equals,copy和hashCode等方法。一个模式匹配包含了一系列备选项,每个都开始于关键字 case。
2023-04-20 16:25:37
700
原创 Scala中Trait 接口的用法
1.trait特性(1)Scala Trait(特征)相当于Java的接口,实际上它比接口功能还强大(2)与接口不同的是,它可以定义属性和方法的实现(3)一般情况下,Scala的类可以继承多个Trait,从结果来看就是实现了多重继承。Trait(特征)定义的方式与类类似,但它使用的关键字时trait。2.举例:trait中带属性带方法实现注意:(1)继承的多个trait中如果有同名的方法和属性,必须在类中使用“override”重新定义(2)trait中不可以传参(3)一个类继承
2023-04-20 14:54:03
283
原创 Scala 中的 Tuple 元组详解
元组的定义:与列表一样,与列表不同的是元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。当定义的元组当中包含不同的数据类型,可看到返回值开始会包含其所对应的数据类型。
2023-04-20 12:40:46
474
原创 Scala中的Map 集合详解
一、不可变长Map集合1.map的声明与遍历2.map的常用方法:get、getOrElse、keys、values、++、++:二、可变长Map集合三、Map的其他方法
2023-04-20 12:06:42
3301
原创 Scala 中的 List 列表详解
一、不可变长的List列表1.List列表的声明与遍历2.List列表的map、flatMap函数3.List列表的filter过滤函数4.List列表的count计数函数二、可变长的List列表1.可变长List声明2.可变长List的添加方法三、List列表其余的方法与函数
2023-04-20 09:53:24
2239
原创 Scala 中的 Array 数组 详解
一、不可变长数组1.一维数组的创建与遍历2.二维数组的创建与遍历3.数组的一些方法二、可变长数组ArrayBuffer三、数组其余的一些方法
2023-04-18 23:58:08
610
原创 Scala字符串String详解
Scala中的String和Java中的String用法一样,它们的方法和用法都是一样的。➢ 比较:equals➢ 比较忽略大小写:equalsIgnoreCase➢indexOf:如果字符串中有传入的assci码对应的值,返回下标
2023-04-18 22:44:01
462
原创 Scala的方法定义与函数详解
*** 1.方法定义* 1)方法体中最后返回值可以使用return,如果使用了return,那么方法体重的返回值类型一定要指定* 2)如果方法体中没有return,默认将方法体中最后一行计算结果当做返回值返回,方法体的返回值类型可以省略,scala会自动推断返回类型* 3)定义方法传入的参数一定要指定类型* 4)方法的方法体如果可以一行搞定,那么方法体的"{......}"可以省略。
2023-04-18 19:40:15
745
原创 数据结构各结构特点(数组、链表、栈、队列、树)
一、数组简介:数组是一种线性表结构,元素序列有序,在内存中开辟一段连续的内存空间。数组具有随机访问的优势,可以通过下标访问元素,时间复杂度为O(1),但插入删除操作比较复杂,需要移动其他元素,所以时间复杂度为O(n)。特点:1.数组在逻辑上、内存中都是连续的,数组需要开辟一段连续的内存空间2.查找元素快:通过索引,可以快速访问指定位置的元素3.增删元素慢:因为数组长度是固定的,如果插入删除元素的话,就要涉及到元素的移动。
2023-04-18 12:56:21
2258
原创 Scala类和对象(Object、class)、循环语句
是一门满足现代软件工程师需求的语言;它是一门静态类型语言,支持混合范式;它也是一门运行在 JVM 之上的语言,语法简洁、优雅、灵活。Scala 拥有一套复杂的类型系统,Scala方言既能用于编写简短的解释脚本,也能用于构建大型复杂系统。
2023-04-16 18:07:11
570
原创 平衡二叉树(AVL树)
1.AVL(二叉平衡树)主要是为了解决二叉查询树不平衡的情况下,导致查询效率低下的解决方案。2.AVL的主要规则:左子树和右子树的高度差不能超过1,如果超过1那么则进行左旋转或者右旋转来达到平衡的状态。3.具体的旋转规则如下:(1)左子树的高度 - 右子树的高度 > 1 如果:左子节点的右子树的高度 > 左子树的高度,那么左子节点先进行左旋转 将当前根节点进行右旋转(2)右子树的高度 - 左子树的高度 > 1 如果:右子节点的左子树的高度
2023-04-16 14:33:38
550
原创 二叉查找树
通过中序遍历,刚好可以把二叉查找树从小到大进行遍历输出。1.通过中序遍历就可以将二叉查找树进行顺序输出。2.中序遍历的特征:左、根、右。
2023-04-14 16:37:03
471
转载 Failed to initialize compiler: object java.lang.Object in compiler mirror not found.
安装scala出现Failed to initialize compiler以及IDEA中编写scala程序出现错误: 找不到或无法加载主类问题的解决
2023-04-13 16:22:24
1739
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅