- 博客(47)
- 收藏
- 关注
原创 算子有几类
• reduceByKey:对 RDD 中的每个键的所有值进行归并操作,返回一个新的 RDD。• mapPartitions:对 RDD 的每个分区应用一个函数,返回一个新的 RDD。• groupByKey:对 RDD 中的每个键的所有值进行分组,返回一个新的 RDD。• flatMap:将 RDD 中的每个元素映射为多个元素,返回一个新的 RDD。• mapValues:对 RDD 中的每个值应用一个函数,返回一个新的 RDD。• map:对 RDD 中的每个元素应用一个函数,返回一个新的 RDD。
2025-05-07 10:18:43
157
原创 怎么理解RDD中的算子
在 Apache Spark 中,RDD(Resilient Distributed Dataset)是分布式数据集的基本抽象,而**算子(Operators)**是用于对 RDD 进行操作的函数。• rdd2.filter(lambda x: x > 5) 是另一个转换操作,返回一个新的 RDD rdd3。• rdd.map(lambda x: x * 2) 是一个转换操作,返回一个新的 RDD rdd2。• map:对 RDD 中的每个元素应用一个函数,返回一个新的 RDD。
2025-05-07 10:17:20
204
原创 RDD有哪几种创建方式
通过对已有的RDD执行转换操作(如`map`、`filter`、`flatMap`等),可以生成新的RDD。通过`parallelize()`方法将本地集合转换为RDD。这种方式适合在测试或处理小规模数据时使用,它能将本地的Python列表、Java数组等集合数据并行化到集群上。可以从多种外部存储系统中读取数据来创建RDD,这些存储系统包括但不限于本地文件系统、Hadoop分布式文件系统(HDFS)、Amazon S3等。# 对rdd1进行map转换操作,生成新的RDD。### 从其他RDD转换创建。
2025-05-07 08:56:36
236
原创 什么是RDD
常见的转换操作有`map`、`filter`、`union`、`join`等。- **对已有的RDD进行转换操作**:通过对一个或多个已有的RDD执行转换操作,如`map`、`filter`、`flatMap`等,生成新的RDD。- **容错弹性**:RDD具有容错机制,当某个节点上的数据丢失时,可以根据RDD的 lineage(血统)信息,通过重新计算的方式恢复丢失的数据。- **分布式**:RDD的数据分散存储在集群的多个节点上,每个节点负责处理自己所存储的数据,从而实现并行计算,提高处理效率。
2025-05-07 08:54:49
199
原创 如何在idea中写spark程序。
打开IntelliJ IDEA,依次点击`File` -> `Settings`(Windows/Linux)或`IntelliJ IDEA` -> `Preferences`(Mac),在`Plugins`中搜索`Scala`并安装。- 在左侧选择`Maven`,如果需要使用Scala,确保勾选`Create from archetype`,并选择合适的Scala Maven原型,如`org.scala-tools.archetypes:scala-archetype-simple`。
2025-04-28 19:38:01
498
原创 如何搭建spark yarn 模式的集群集群
**安装并配置Hadoop集群**:要确保集群里已经装好了Hadoop集群,其中涵盖HDFS和YARN,同时各个节点之间能够实现无密码SSH登录。注意要依据实际情况对`JAVA_HOME`、`HADOOP_CONF_DIR`和`SPARK_MASTER_HOST`等参数进行修改。从Spark官方网站下载适配你Hadoop版本的Spark安装包,之后解压到所有节点的指定目录。要是作业能正常完成,就表明Spark YARN模式的集群搭建成功了。- **安装Java环境**:所有节点都得安装好Java环境。
2025-04-28 19:35:29
438
原创 spark和Hadoop之间的对比和联系
**更灵活的计算模型**:Spark不仅支持批处理,还支持实时计算(通过Spark Streaming)和交互式查询(通过Spark SQL)。- **容错性依赖内存和RDD特性**:Spark的容错机制主要依靠RDD的血统机制(lineage)。- **容错性高**:Hadoop的容错机制主要依靠HDFS的副本机制。在大数据时代,数据量呈爆炸式增长,无论是Hadoop还是Spark,其设计初衷都是为了应对海量数据的存储、管理和分析,帮助企业和组织从海量数据中提取有价值的信息。
2025-04-23 11:08:56
459
原创 Hadoop
任务管理:负责启动和管理应用程序的任务,并确保任务的正常执行。日志管理:负责管理应用程序的日志文件,确保日志文件的存储和访问。ApplicationMaster(AM):资源请求:向 ResourceManager 请求资源,获取足够的资源来运行应用程序的任务。YARN 是 Hadoop 的资源管理框架,它负责管理和调度集群中的计算资源,并为各种分布式应用程序提供资源分配和任务调度服务。YARN 提供了资源管理和任务调度功能,确保集群资源的高效利用和应用程序的顺利运行。3.yarn的三大组件及各自作用。
2025-04-18 15:20:39
348
原创 mapreduce的工作原理
**Reduce 阶段**:Reduce 任务接收每个分区的数据,将相同单词的出现次数累加,得到最终的 `<单词, 总出现次数>` 结果,如 `<Hello, 2>`、`<World, 1>`。- **分区**:Shuffle 阶段会对 Map 任务输出的中间键值对进行分区操作,默认情况下,根据键的哈希值将键值对分配到不同的分区中,每个分区对应一个 Reduce 任务。- **Shuffle 和排序**:根据单词的哈希值将键值对分区,同一单词的键值对会被分配到同一个分区,并在分区内按单词排序。
2025-03-31 19:31:08
445
原创 hadoop 集群的常用命令
/path/to/your/jar/file.jar` 是包含 MapReduce 作业代码的 JAR 文件路径,`main_class` 是作业的主类名,`input_path` 是输入数据在 HDFS 上的路径,`output_path` 是作业输出结果在 HDFS 上的路径。此命令会将 HDFS 上的文件下载到本地指定的位置。将 `/path/to/directory` 替换为你要查看的实际目录路径,该命令会列出该目录下的所有文件和子目录的详细信息,包括权限、所有者、大小和修改时间等。
2025-03-31 19:27:31
475
原创 vi常见操作命令
替换操作可以使用`:s/old/new/g`,其中`old`是要替换的旧字符串,`new`是新字符串,`g`表示全局替换。- 在命令模式下输入`i`(在光标前插入)、`a`(在光标后插入)、`o`(在光标所在行的下一行插入新行并进入编辑模式)等命令可以进入编辑模式,此时可以输入和编辑文本。- 在命令模式下,使用`h`(向左移动一个字符)、`j`(向下移动一行)、`k`(向上移动一行)、`l`(向右移动一个字符)来移动光标。- 在命令模式下,`x`删除光标所在位置的字符,`dd`删除光标所在的整行。
2025-03-03 19:32:10
198
原创 VM+CentOS虚拟机
进入CentOS虚拟机,使用vi编辑器修改网络配置文件,如`/etc/sysconfig/network-scripts/ifcfg-ens33`(文件名可能因虚拟机网络适配器不同而有所差异)。- 打开VMware Workstation Pro,选择“新建虚拟机”,按照向导提示选择“安装程序光盘映像文件(ISO)”,并选择下载的CentOS镜像文件。- 在VMware中,点击“编辑”→“虚拟网络编辑器”,选择VMnet8并进行相关设置。**一、VM+CentOS虚拟机配置**
2025-03-03 19:29:45
401
原创 Linux常用指令
例如`tar -cvf archive.tar files_to_archive`(打包),`tar -xvf archive.tar`(解压)。常用选项有`-a`(列出所有文件,包括隐藏文件)、`-l`(显示文件的详细信息)等。- `rm`:删除文件或目录。使用`-r`选项删除目录,`-f`选项强制删除不提示。可通过`-n`选项指定行数,如`head -n 20 file.txt`。- `chown`:修改文件或目录的所有者。- `less`:与`more`类似,但功能更强大,支持搜索等操作。
2025-03-03 19:26:20
180
原创 如何安装配置虚拟机
**Microsoft Hyper - V**:仅适用于Windows系统(Windows 10专业版及以上),集成在操作系统中,对于Windows用户来说比较方便,如果主要在Windows环境下使用虚拟机可以考虑。- 在创建好的虚拟机设置中,选择“CD/DVD(SATA)”选项,在右侧选择“使用ISO映像文件”,浏览并选择下载好的操作系统ISO文件。- 创建虚拟硬盘,选择硬盘类型(如VDI、VHD等),并确定硬盘大小和存储方式(如动态分配或固定大小)。
2025-02-20 17:16:10
377
原创 Scala的正则表达式2
a+` 可以匹配 `a`、`aa`、`aaa` 等,但不能匹配空字符串;例如,`a` 匹配字符 `a`,`[abc]` 匹配 `a`、`b` 或者 `c` 中的任意一个字符,`[a-z]` 匹配从 `a` 到 `z` 的任意一个小写字母。例如,`(ab)+` 表示 `ab` 这个组合至少出现1次,如 `ab`、`abab`、`ababab` 等符合要求。例如,`^` 表示匹配行首,`$` 表示匹配行尾。`^abc` 表示匹配以 `abc` 开头的行,`abc$` 表示匹配以 `abc` 结尾的行。
2024-12-11 20:55:51
204
原创 Scala正则表达式1
排除字符集 [^ ] [^ ] 开头加 ^,匹配排除字符 [^abc],文本 d [^abc] 匹配除 a、b、c 之外的字符,如 d。方括号 [ ] [ ] 定义字符集,匹配其一 [abc],文本 a、b 或 c [abc] 匹配 a、b 或者 c。\w 等价[a-zA-Z0-9_],匹配相关字符 \w+,文本abc、abc123、abc_ \w+匹配对应字符串。\W 等价[^a-zA-Z0-9_],匹配其他 \W,文本& \W匹配非字母数字下划线字符,如&
2024-12-11 20:53:44
413
原创 Scala的正则表达式3
/在如下字符串中 查找 满足正则表达式要求的内容。非贪婪模式,加在量词的后面。// 3.第二个数字是3-9的数.// 正则匹配默认是贪婪模式的。// 2.第一个数字是1.// 1.11位数字.// 找全部的手机号。scala正则表达式开发语言。发布于2024-12-03。贪婪模式与非贪婪模式。
2024-12-11 20:52:51
486
原创 Scala的隐式对象
/ 格式:implicit object。getConn // 采用默认值。// 作用:给函数的默认参数提供隐式值。格式:implicit object。作用:给函数的默认参数提供隐式值。scalaandroid开发语言。发布于2024-12-10。
2024-12-11 20:51:55
280
原创 使用 Maven 来构建 Scala
src/main/resources/archetype-resources 目录下的内容大体上认为就是生成目标项目的时候,生成的目标项目会拥有的东西,没做裁剪之前,这些内容都是根据 currency-webapi-with-scala 的内容“拷贝(Copy)”过来的,我们会对这个符合 Maven 项目结构目录下的内容进行裁剪。关于基于 Maven 的 Scala 项目的依赖治理以及 spring-boot-starter-scala,我们暂时就介绍到这里。
2024-12-11 20:49:54
817
原创 Scala的泛型
/ getMiddleEle(List(1,2,3,4,5)) ==> 5/2 = 2 ==> 下标为2的元素是:3。// getMiddleEle(List(1,2,3,4)) ==> 4/2 = 2 ==> 下标为2的元素是:3。// List[Int]:List是列表,[Int] 是说列表中的每一个元素都是int!// 类型参数 -----泛型(数据类型是变化的)// 用它来获取当前的列表的中间位置上的值。// 中间位置的下标 = 长度/2。// (1) 可以有多个。
2024-12-11 20:47:29
315
原创 Scala定义函数方法
/简写2:用 _ 占位符.(Int,Int)=>Int 他表示一种类型:收到两个整数的参数,返回一个整型值。// var classRoom = "教室310"//字面量。//println("教室310")//字面量。//定义函数的方式2:字面量的方式 =>//教室310+教室309。//定义函数的方式1。//简写1:省略{}发布于2024-12-11。
2024-12-11 20:45:56
204
原创 Scala的Map方法
如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类。在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。查询 :get方法,输入key,如果找到,就返回包装数据,如果没有找到,就返回None。Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。发布于2024-12-11著作权归作者所有。Map常用操作有增加,删除,修改,查询。
2024-12-11 20:43:58
317
原创 列表添加书籍
1.创建一个可变 Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示,如 “Java 编程思想”“Scala 实战” 等),初始化为包含几本你喜欢的书籍。4.检查某一本特定的书籍(如 “Python 从入门到实践”)是否在图书馆集合中,使用 contains 方法,并输出结果。7.求出两个图书馆书籍集合的交集,使用 intersect 方法,并输出结果。6.求出两个图书馆书籍集合的并集,使用 union 方法,并输出结果。5.创建另一个可变 Set,表示另一个图书馆的书籍集合。
2024-12-11 20:43:05
190
原创 Scala的迭代器
无论底层集合的具体结构如何,只要能获取到迭代器,就可以使用相同的hasNext和next方法来遍历元素。zip方法用于将两个迭代器的元素按顺序组合成一个新的迭代器,其中每个元素是一个包含两个迭代器对应位置元素的元组。如果两个迭代器的长度不同,zip操作会在较短的迭代器耗尽时停止。迭代器采用延迟计算的方式,它不会将整个集合加载到内存中,而是在每次调用next方法时才计算并返回下一个元素。返回一对迭代器,它们可以独立遍历原始迭代器中的元素序列。take 只处理当前开始的,指定数量的元素,返回一个新的迭代器。
2024-12-11 20:42:03
396
原创 Scala的Array
/ ArrayBuffer(1,2,3,4,5),取出3,4 组成一个新的数组。// filter 过滤。// 1-10的数组,每隔2个 range 不包括终点,2 是步长。// slice(起点下标,终点下标) // 不包括终点下标!// 2.访问. 数组名(下标)。// println(s"第一个元素是${arr1(0)}")// indexOf: // 找到第一个元素的下标。// 有,就返回第一次出现的下标。// 不可变数组 Array。// 3.快速填充数组内容。// 找到大于100的元素。
2024-12-11 20:41:05
439
原创 List列表
dreamList += DreamItem("莫名其妙获得10000000000000",false,"2030-10-01",1)dreamList += DreamItem("有100套房子",false,"2030-10-01",1)dreamList += DreamItem("周游全世界",false,"2030-10-01",1)dreamList += DreamItem("月薪十万+",false,"2030-10-01",1)发布于2024-12-11。
2024-12-11 20:39:27
405
原创 正则表达式
/ 6.脱字符^ 如果在正则的最前面,表示要匹配的内容必须在字符串的开头。// 7.脱字符$ 如果在正则的最后面,表示要匹配的内容必须在字符串的结尾。// 8.英文的. : 表示除了之外的其他任意一个字符,一个字符一个点。// 2.[a-z]: 表示从a到z的26个字母中的任意的一个。// 3.[A-Z]: 表示从A到Z的26个字母中的任意的一个。// 4.1 [^ab]: 表示匹配一个字符,除a,b之外的。// 4.[0-9]: 表示从0到10中的任意的一个。// 9.\d: 表示0-9的一个数字。
2024-12-11 20:38:12
147
原创 //定义一个特质 //特质可以有抽象属性,具体属性,抽象方法,具体方法//具体属性
println(s"${age}岁,${height}大高个,${hair}")val height = 180 //val 不可以修改,var可以修改。//var 修饰的,可以用override重写。//特质可以有抽象属性,具体属性,抽象方法,具体方法。println(s"嘴角微微扬起")//var 修饰的可以直接赋值。//具体属性可以重写(可选)//抽象方法 要具体实现。//抽象属性 要具体实现。//抽象属性(没有=)//抽象方法(没有=)发布于2024-11-12。//具体方法可以重写。
2024-12-11 20:36:14
219
原创 Scala语法:把函数作为返回值/函数的柯里化
var t = add(100)(300)_ //_表示一个占位符。先算有两个参数的情况,结果是一个函数。println(add(100)(200)(400))//直接给三个参数。println(t(200)) //传入最后一个参数,就能计算结果了。//写一个函数,它的返回值是一个函数。//柯里化的方式 定义一个函数。//currying 柯里化。//函数的另一种方式。
2024-11-12 17:56:47
295
原创 用Scala求斐波那契数列的第n项
记: 0 1 1 2 3 5 8 13 21 34 55 ... 从第3项开始 f(n) = f(n-1) + f(n-2)2.递归情况(大事化小,自己调用自己): f(n) = f(n-1) + f(n-2)1.基本情况(直接能求的):f(0) = 0,f(1) = 1。用Scala求斐波那契数列的第n项。问题:求 斐波那契数列的第n项。
2024-11-12 17:53:13
321
原创 Scala抽象
/abstract:抽象类。有抽象方法的类,就是抽象类。抽象方法就是没有方法体的方法 def autoRun。println(s"小米的自动驾驶.....${sheel},${hasDriver}")println(s"小米汽车的自动泊车功能")println("小米 su7 的 run")// 抽象类:制定标准,让其他的类去实现!sheel = 3 //重写父类的属性。//把父类的抽象标准变为现实-具体!
2024-11-12 17:24:18
245
原创 Scala高阶函数flatten和flatmap
在这个例子中, flatMap 对每个元素 x 应用函数 x => List(x, x * 2) ,该函数返回一个包含原始元素和其两倍的列表。它首先对集合中的每个元素应用一个函数,该函数返回一个集合,然后将所有这些结果集合展开为一个单一的集合。flatten 用于将嵌套的集合展开为一个单一的集合。例如,如果有一个包含多个列表的列表, flatten 可以将其转换为一个包含所有元素的单个列表。在 Scala 中, flatten 和 flatMap 都是用于处理集合的高阶函数,但它们的作用略有不同。
2024-10-17 00:23:54
294
原创 Scala高阶函数filter
例如,在上面的例子中, _ % 2 == 0 是一个匿名函数,用于判断一个数是否为偶数。filter 函数将这个匿名函数应用于列表中的每个元素,并返回一个新的列表,其中只包含满足条件的元素。在这个例子中,首先使用 filter 函数筛选出长度大于 4 的名字,然后使用 map 函数将这些名字转换为大写。println(evenNumbers) // 输出 List(2, 4, 6, 8, 10)在 Scala 中, filter 是一个高阶函数,用于从集合中筛选出满足特定条件的元素。
2024-10-17 00:18:14
448
原创 Scala高阶函数map和foreach
collection.foreach(function) ,其中 collection 是一个集合, function 是一个用于执行副作用操作的函数。foreach 函数用于对集合中的每个元素执行一个副作用操作,例如打印元素、修改外部变量等。collection.map(function) ,其中 collection 是一个集合, function 是一个用于转换元素的函数。map 函数对集合中的每个元素应用一个函数,将其转换为另一种形式,并返回一个新的集合,新集合的元素个数与原集合相同。
2024-10-17 00:12:29
259
原创 Scala的函数字面量
在这个例子中, applyFunction 函数接受一个函数参数 f 和一个整数参数 x ,并返回将函数 f 应用于 x 的结果。在这个例子中, (x: Int, y: Int) => x + y 就是一个函数字面量,它接受两个整数参数并返回它们的和。函数字面量在函数式编程中非常有用,可以作为参数传递给其他函数,或者作为返回值返回。println(applyFunction(double, 6)) // 输出 12。println(add(3, 4)) // 输出 7。
2024-10-17 00:06:44
162
原创 Scala的函数的调用
定义一个Rational类,说明Scala函数使用。(1)定义一个求两个数的最大公约数的方法。(2)定义一个求两个整数和的方法。
2024-09-29 22:06:33
295
原创 Scala的雯波那锲数列
以下是用 Scala 实现斐波那契数列的几种方法:方法一:递归实现n} else {方法二:迭代实现n} else {var a = 0var b = 1a = bb = resultresult你可以使用以下方式调用这些函数:
2024-09-29 21:40:55
281
原创 Scala的函数递归
这个函数计算第 n 个斐波那契数,如果 n 小于等于 1,则返回 n;否则,返回第 n - 1 个斐波那契数和第 n - 2 个斐波那契数之和。需要注意的是,对于较大的 n ,这种递归实现可能会非常耗时,因为会有很多重复计算。可以考虑使用动态规划等方法来优化。这个函数在计算 n 的阶乘时,如果 n 等于 0,则返回 1;否则,返回 n 乘以 n - 1 的阶乘,通过不断地调用自身来实现阶乘的计算。在 Scala 中,递归是一种通过函数调用自身来解决问题的方法。
2024-09-29 21:30:40
253
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人